標籤:python 序列化 pickle
什麼叫做序列化?
將記憶體中的對象轉換為線性結構的字串(有時也稱位元組流),以便儲存或者傳輸.這種對象轉換為字串的行為通常叫做序列化.記憶體中的任意資料結構都可以映射為一個字串.
序列化
函數簽名
#pickle.dump(obj, file[, protocol])
首先嘗試將table對象序列化寫入檔案dbase中,寫入方式是位元組形式:
table = {‘a‘ : [1, 2, 3], ‘b‘ : [‘spam‘, ‘egg‘], ‘c‘ : {‘name‘ : ‘Bob‘}}with open(‘dbase‘, ‘wb‘) as ff: pickle.dump(table, ff)
如果我們開啟這個dbase檔案,可以看到如下一些看起來沒意義的字串,其實是python用內部約定的方式對table對象轉換為了這種字串.這裡請注意不同版本的python序列化後的字串可能有所不同,因此序列化適用於儲存不是特別重要的資料.否則升級python版本後,還原序列化會還原對象時會出現不一致的問題.
(dp0S‘a‘p1(lp2I1aI2aI3asS‘c‘p3(dp4S‘name‘p5S‘Bob‘p6ssS‘b‘p7(lp8S‘spam‘p9aS‘egg‘p10as.
也可以序列化後不用寫入檔案,直接用pickle.dump以字串返回:
string = pickle.dumps(table)
還原序列化
函數簽名:
pickle.load(file)
從dbase檔案讀出還原序列化還原對象:
with open(‘dbase‘, ‘rb‘) as fobj: table_ = pickle.load(fobj)print table_
輸出:
{‘a‘: [1, 2, 3], ‘c‘: {‘name‘: ‘Bob‘}, ‘b‘: [‘spam‘, ‘egg‘]}
從輸出結果不難看出,與原來的table字典內容相同.
同樣我們可以直接讀入字串還原序列化:
obj = pickle.loads(string)
python序列化pickle