一蔗怠、定義
序列化是指將對象從內(nèi)存中取出來寫入存儲區(qū),如txt文件中,反序列則相反策治。
二履腋、 應(yīng)用場景
跨平臺數(shù)據(jù)傳輸;
保留上一次運行程序時對對象的修改
三、 模塊和函數(shù)
- json
dumps()芦瘾、dump()(序列化)
loads()牡整、load() (反序列化)
- pickle
dumps()迫摔、dump()(序列化)
loads()、load ()(反序列化)
四、 應(yīng)用案例
- pickle
import pickle
info = {"lyrics": "GeCi",
"song": "GeQu",
"time": 89}
with open("pickling.txt","wb") as f: #序列化
f.write(pickle.dumps(info))
with open("pickling.txt", "rb") as f: #反序列化
print(pickle.load(f))
上述代碼首先將字典info轉(zhuǎn)化為str類型的對象哺壶,然后寫入txt文件中资锰,其中,第8行可以替換為:
pickle.dump(info,f)
二者實現(xiàn)的效果是一樣的萨咳,只不過dums直接將對象序列化后寫入txt文件中舀凛。寫入文件的結(jié)果是一堆看不懂的東西懊烤,如下所示:
但是這并沒有出錯,不信,最后用load()函數(shù)將其反序列化后在控制臺輸出結(jié)果為:
同樣地察净,loads()函數(shù)可以替換load函數(shù)译秦。如下:
1 print(pickle.loads(f.read()))
- json
pickle是python獨有的,而json可以實現(xiàn)不同編程語言的數(shù)據(jù)轉(zhuǎn)換和傳輸甲馋。不同編程語言進(jìn)行數(shù)據(jù)傳輸就需要將自身數(shù)據(jù)類型轉(zhuǎn)換為一個共同的標(biāo)準(zhǔn)類型痊远,json就是其中一種借宵。json數(shù)據(jù)類型和python數(shù)據(jù)類型的對應(yīng)關(guān)系如下所示:
json的用法與pickle大致相同哼凯,不再贅述,但要注意在讀寫文件時json的讀寫模式不是“wb”和“rb”达址,而是“w”和“r”。