一 前言 ?
創(chuàng)新互聯(lián)成立于2013年,先為義縣等服務(wù)建站,義縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為義縣企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
最近一直在做開發(fā)相關(guān)的工作--基于Django的web 平臺(tái),其中需要從model層傳輸數(shù)據(jù)到view 層做數(shù)據(jù)展示或者做業(yè)務(wù)邏輯處理。我們采用通用的Json格式--Json(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,易于閱讀和程序解析。
二 認(rèn)識(shí)Json
2.1 Json 結(jié)構(gòu)
常見的Json格式為 “名稱/值”對(duì)的集合,其中 值可以是對(duì)象,列表,字典,字符串等等。比如
backup_data?=?{"back_to_host":?"dbbk0",
"ip_address":?"10.10.20.3",
"host_name":?"rac4",
"port":?3306}
2.2 使用Json
Python的Json模塊序列化與反序列化的過(guò)程分別是 編碼和解碼。這兩個(gè)過(guò)程涉及到兩組不同的函數(shù)
編碼 把一個(gè)Python對(duì)象編碼轉(zhuǎn)換成Json字符串,json.dumps(data)/json.dump(data,file_handler)
解碼 把Json格式字符串解碼轉(zhuǎn)換成Python對(duì)象,json.loads(data)/json.load(file_handler)
在python中要使用Json模塊做相關(guān)操作,必須先導(dǎo)入:
import Json
2.3 主要函數(shù)
編碼函數(shù)主要有 json.dumps(data)/json.dump(data,file_handler)
json.dumps()的參數(shù)是將python對(duì)象轉(zhuǎn)換為字符串,如使用json.dumps序列化的對(duì)象json_dumps=json.dumps({'a':1, 'b':2}) ,json_dumps='{"b": 2, "a": 1}'
json.dump 是將內(nèi)置類型序列化為json對(duì)象后寫入文件。
解碼函數(shù)主要由json.loads(data)/json.load(file_handler) ?
json.loads的參數(shù)是內(nèi)存對(duì)象,把Json格式字符串解碼轉(zhuǎn)換成Python對(duì)象,json_loads=json.loads(d_json) ?#{ b": 2, "a": 1},使用load重新反序列化為dict
json.load()的參數(shù)針對(duì)文件句柄,比如本地有一個(gè)文件/tmp/test.json ?json_load=json.load(open('/tmp/test.json'))
具體案例參考如下:
In?[3]:?data={"back_to_host":?"rac1",
...:?"ip_address":?"10.215.20.3",
...:?"host_name":?"rac3",
...:?"port":?3306}
In?[7]:?json_str=json.dumps(data)
In?[8]:?print json_str
{"ip_address":?"10.215.20.3",?"back_to_host":?"rac1",?"host_name":?"rac3",?"port":?3306}
In?[9]:?json_loads=json.load(json_str)
---------------------------------------------------------------------------
AttributeError Traceback?(most recent?call?last)
ipython-input-9-180506f16431?in?module()
----?1 json_loads=json.load(json_str)
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.pyc?in?load(fp,?encoding,?cls,?object_hook,?parse_float,?parse_int,?parse_constant,?object_pairs_hook,?**kw)
284
285?""
注意 從上面的報(bào)錯(cuò)信息來(lái)看 json.loads 傳參是字符串類型,并不是文件句柄,沒(méi)有 read()屬性。
In?[10]:?json_loads=json.loads(json_str)
In?[11]:?print json_loads
{u'back_to_host':?u'rac1',?u'ip_address':?u'10.215.20.3',?u'host_name':?u'rac3',?u'port':?3306}
In?[12]:?type(json_loads)
Out[12]:?dict
In?[13]:?type(json_str)
Out[13]:?str
利用dump 將數(shù)據(jù)寫入 dump.json
In?[17]:?with open('/tmp/dump.json','w')?as f:
...:?json.dump(json_str,f)
...:
yangyiDBA:~?yangyi$ cat /tmp/dump.json
"{\"ip_address\": \"10.10.20.3\", \"back_to_host\": \"rac1\", \"host_name\": \"rac3\", \"port\": 3306}"
yangyiDBA:~?yangyi$
利用json.load 將dump.sjon的數(shù)據(jù)讀出來(lái)并賦值給 data?
In?[18]:?with open('/tmp/dump.json','r')?as f:
...:?data=json.load(f)
...:
In?[19]:?print data
{"ip_address":?"10.10.20.3",?"back_to_host":?"rac1",?"host_name":?"rac3",?"port":?3306}
三 小結(jié)
本文算是一篇學(xué)習(xí)筆記,主要對(duì)比了json.loads/json.load ?, json.dumps/ json.dump 的使用差異 ,方便以后更好的使用json 。
以上為本次分享內(nèi)容,感謝觀看。
1、一般來(lái)說(shuō),聲明編碼格式在腳本中是必需的。2、如果Python源碼文件沒(méi)有聲明編碼格式,Python解釋器會(huì)默認(rèn)使用ASCII編碼。但出現(xiàn)非ASCII編碼的字符,Python解釋器就會(huì)報(bào)錯(cuò)。
1、Python 采用代碼縮進(jìn)和冒號(hào)( : )來(lái)區(qū)分代碼塊之間的層次。2、在 Python 中,對(duì)于類定義、函數(shù)定義、流程控制語(yǔ)句、異常處理語(yǔ)句等,行尾的冒號(hào)和下一行的縮進(jìn),表示下一個(gè)代碼塊的開始,而縮進(jìn)的結(jié)束則表示此代碼塊的結(jié)束。3、Python 中實(shí)現(xiàn)對(duì)代碼的縮進(jìn),可以使用空格或者 Tab 鍵實(shí)現(xiàn)。但無(wú)論是手動(dòng)敲空格,還是使用 Tab 鍵,通常情況下都是采用 4 個(gè)空格長(zhǎng)度作為一個(gè)縮進(jìn)量(默認(rèn)情況下,一個(gè) Tab 鍵就表示 4 個(gè)空格)。4、對(duì)于 Python 縮進(jìn)規(guī)則,初學(xué)者可以這樣理解,Python 要求屬于同一作用域中的各行代碼,它們的縮進(jìn)量必須一致,但具體縮進(jìn)量為多少,并不做硬性規(guī)定。
正確示例代碼:
錯(cuò)誤示例代碼:
Python中使用 # 進(jìn)行注釋,我們?cè)谑褂? 的時(shí)候,# 號(hào)后面要空一格在行內(nèi)注釋的時(shí)候,中間應(yīng)該至少加兩個(gè)空格
print("你好,世界") # 注釋
** 使用的一般性原則:**
1、在二元運(yùn)算符兩邊各空一格,算術(shù)操作符兩邊的空格可靈活使用,但兩側(cè)務(wù)必要保持一致2、不要在逗號(hào)、分號(hào)、冒號(hào)前面加空格,但應(yīng)該在它們后面加(除非在行尾)3、函數(shù)的參數(shù)列表中,逗號(hào)之后要有空格4、函數(shù)的參數(shù)列表中,默認(rèn)值等號(hào)兩邊不要添加空格5、左括號(hào)之后,右括號(hào)之前不要加添加空格6、參數(shù)列表, 索引或切片的左括號(hào)前不應(yīng)加空格
使用的一般性原則:
1、編碼格式聲明、模塊導(dǎo)入、常量和全局變量聲明、頂級(jí)定義和執(zhí)行代碼之間空兩行2、頂級(jí)定義之間空兩行,方法定義之間空一行3、在函數(shù)或方法內(nèi)部,可以在必要的地方空一行以增強(qiáng)節(jié)奏感,但應(yīng)避免連續(xù)空行
1、導(dǎo)入總應(yīng)該放在文件頂部,位于模塊注釋和文檔字符串之后,模塊全局變量和常量之前。
2、導(dǎo)入應(yīng)該按照從最通用到最不通用的順序分組,分組之間空一行:
3、每個(gè) import 語(yǔ)句只導(dǎo)入一個(gè)模塊,盡量避免一次導(dǎo)入多個(gè)模塊
命名規(guī)范這一塊的大家應(yīng)該都比較熟悉了,但是不同的編程語(yǔ)言之間的明明規(guī)范也是有所區(qū)別的~
Python命名建議遵循的一般性原則:
引號(hào)使用的一般性原則:
Python跟其他幾個(gè)主流編程語(yǔ)言的分號(hào)使用區(qū)別很大Python的代碼末尾不需要加分號(hào),而Java和C#等都需要添加
不要在行尾添加分號(hào),也不要用分號(hào)將兩條命令放在同一行,例如:
Python學(xué)習(xí)日記
度知道 提問(wèn)
搜一搜
python中怎么求ascii碼7、8、9的編碼
社會(huì)我飛哥16888
今天 01:21 超過(guò)161用戶采納過(guò)TA的回答
關(guān)注
我們可以使用for循環(huán)和ord()函數(shù)來(lái)獲取字符串的 ASCII 值。ord()函數(shù)返回傳遞字符串的 Unicode。它接受1作為字符串的長(zhǎng)度。for循環(huán)用于迭代序列:列表、元組、字典、集合或字符串。因此,我們可以使用for循環(huán)來(lái)解析字符串的每個(gè)字符并將其轉(zhuǎn)換為 ASCII 值。
在下面的代碼中,text 是一個(gè)保存用戶輸入的變量。ascii_values 最初是一個(gè)空列表,稍后將保存字符串中每個(gè)字符的 ASCII 值。一旦循環(huán)完成其循環(huán),我們將向用戶顯示 ascii_values 的內(nèi)容作為輸出。append() 函數(shù)在每次迭代后向列表 ascii_values 添加一個(gè)新項(xiàng)目。
當(dāng)我們運(yùn)行這個(gè)程序時(shí),用戶會(huì)收到一個(gè)字符串提示,一旦用戶提供了一個(gè)字符串,它就會(huì)被存儲(chǔ)在一個(gè)變量 text 中。在示例中,輸入是字符串 hello。打印字符串中每個(gè)字符的 ASCII 值。
示例代碼:
#python 3.x
text = input("enter a string to convert into ascii values:")
ascii_values = []
for character in text:
ascii_values.append(ord(character))
print(ascii_values)
輸出:
enter a string to convert into ASCII values: hello
[104, 101, 108, 108, 111]
二、在 Python 中使用 List Comprehension 和 ord() 函數(shù)獲取字符串的 ASCII
我們可以使用列表推導(dǎo)來(lái)實(shí)現(xiàn)相同的結(jié)果。Python 中的列表推導(dǎo)式是一種簡(jiǎn)單而緊湊的語(yǔ)法,用于從字符串或其他列表創(chuàng)建列表。這是一種通過(guò)對(duì)現(xiàn)有列表中的每個(gè)項(xiàng)目進(jìn)行操作來(lái)創(chuàng)建新列表的簡(jiǎn)潔方法。列表推導(dǎo)比使用 for 循環(huán)處理列表快得多。
在下面的代碼中,外部沒(méi)有 for 或 while 循環(huán)。但是在列表推導(dǎo)中,我們使用 for 循環(huán)來(lái)獲取 text 的每個(gè) character。
示例代碼:
#python 3.x
text = input("enter a string to convert into ascii values: ")
ascii_values = [ord(character) for character in text]
print(ascii_values)
輸出:
enter a string to convert into ASCII values: hello
[104, 101, 108, 108, 111]
三、使用用戶定義的函數(shù) to_ascii() 在 Python 中獲取字符串的 ASCII
另一種編寫代碼以實(shí)現(xiàn)相同目標(biāo)的方法是使用用戶定義的函數(shù)。用戶定義函數(shù)是用于在策略正文中組織代碼的函數(shù)。一旦你定義了一個(gè)函數(shù),你就可以像內(nèi)置的動(dòng)作和解析器函數(shù)一樣調(diào)用它。傳遞給函數(shù)的變量是通過(guò)引用而不是通過(guò)值傳遞的。
在下面的代碼中,我們使用用戶定義的函數(shù) to_ascii 將 text 作為參數(shù)。在函數(shù)內(nèi)部,定義了塊操作,并通過(guò)關(guān)鍵字 return 傳遞結(jié)果。當(dāng)從提供 text 的主模塊調(diào)用函數(shù) to_ascii 作為參數(shù)控制轉(zhuǎn)移到 to_ascii 函數(shù)并執(zhí)行代碼塊時(shí),我們會(huì)在列表中獲得給定字符串的 ASCII 值。
示例代碼:
#python 3.x
def to_ascii(text):
ascii_values = [ord(character) for character in text]
return ascii_values
text = input("Enter a string: ")
print(to_ascii(text))
輸出:
Enter a string:
hello
[104, 101, 108, 108, 111]