python中常用的序列化模块_使用pickle模块对python对象进行序列化
pickle模塊是Python自帶的一個標準模塊,專用于Python各種對象的序列化和反序列化,可用于Python內置的各種數據對象(Python中一切都是對象),也可用于程序員自定義的類和對象。
pickle是python專用的,其序列化之后的數據格式也是python獨有,外部程序一般解不開(除非按照python pickle的數據標準編程)。
我們主要會用到pickle模塊的load,loads,dump,dumps這4個函數。load和dump兩個函數,是將對象序列化存儲到二進制文件中,和從二進制文件中提取對象;loads和dumps這兩個函數,是在程序運行的內存中操作。
將變量直接在內存中序列化:
>>> list1 = [1,2,3,4,5]
>>> k = pickle.dumps(list1)
>>> k
b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.'
>>>
>>> type(k)
>>>
>>> dict1 = {'a':1,'b':2,'c':3,'d':4}
>>> p = pickle.dumps(dict1)
>>> p
b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02X\x01\x
00\x00\x00cq\x03K\x03X\x01\x00\x00\x00dq\x04K\x04u.'
>>>
>>> type(p)
bytes是python內置的二進制對象。
下面的代碼,我們進行反序列化,將存儲在內存變量中的對象還原:
>>> list2 = pickle.loads(k)
>>> list2
[1, 2, 3, 4, 5]
>>> dict2 = pickle.loads(p)
>>> dict2
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
接下來,我們測試將對象存儲在文件中,并將文件中的對象提取出來:
>>> with open('d:\\pytest\\test.pickle', 'wb') as f:
... pickle.dump(dict2, f)
...
>>>
>>> with open('d:\\pytest\\test.pickle', 'rb') as g:
... dd = pickle.load(g)
...
>>> dd
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>>
f和g分別是寫入和讀出的文件句柄。(推薦:優雅地使用Python的with as語句)
用戶自定的類和對象,均可以使用相同的方法進行序列化存儲和發序列化。
注意:可以直接將一個類定義序列化,反序列化后,還是一樣的按照新賦值的名稱直接使用創建對象。
總結
以上是生活随笔為你收集整理的python中常用的序列化模块_使用pickle模块对python对象进行序列化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 睡觉怎么才能不做梦(睡觉总是做梦?)
- 下一篇: 白羊座性格特征分析