序列化模塊 json pickel shelve
一、json 模塊
1、定義
將字典、列表等內容轉換成字符串的過程就是序列化。
操作的數據類型有限,但是可以支持所有編程語言操作。
2、為什麽要有序列化?
1、以某種存儲形式使自定義對象持久化。
2、將對象進行傳遞
3、是程序更具維護性
3、四大功能 (dumps,loads,dump,load)
dumps loads
import josn lst = [‘aa‘‘, 11, ‘b3‘] ret = json.dumps(lst) # 序列化 print(ret) ret1= json.loads(ret) # 反序列化 print(ret1)
dump load
import json with open (‘t1.txt‘,mode=‘w‘,encoding= ‘utf-8‘) as f: json.dump(lst, f) # 序列化 # dump 用於直接將序列化的字符串寫入文件中 with open (‘t1.txt‘,mode=‘r‘,encoding= ‘utf-8‘) as f: print(json.load(f)) # 反序列化 # load 可以將文件中的字符串返回來
json 模塊的限制
1、json 操作字典的時候,key 必須是字符串形式。
2、json 格式的字典,的key 不能是數字,如果是數字,會被強行轉成str。且進行反序列化後,還是字符串。
3、json格式中的字符串必須是雙引號的形式,如果將json 格式的字符串的雙引號換成單引號,就會報錯。
4、json 對元祖進行序列化是會被強行轉換成列表,反序列化後還是列表,而不會返回元祖。
5、json 支持元祖做字典的value值,不支持做key 。
6、json.dump支持多次dump寫入文件,但不支持load。(因為寫入後會出現,多種類型出現在一行)。
要想dump多個數據進入文件,需要用dumps
7、對於中文,如果不處理,序列化後會變成ascii碼類型。
因此,ensure_ascii = False 時,就可以是中文類型了。
8、set 不能被dumps/dump
二、pickel 是python特有的模塊,不能跨語言,但是支持的數據類型多樣。
1、dumps, loads (pickel.dumps 的結果是bytesle類型)
2、dump load
如果對文件進行操作,dump時,需要時 wb 模式寫入,而進行 load時,需要 rb 模式讀出。
3、可以進行多次dump/load 操作。
三、shelve
1、當你寫定一個文件後,對文件的改動較小,讀取文件的次數較多的時候,可以使用shelve。
序列化模塊 json pickel shelve