python中常用的序列化模块_使用pickle模块对python对象进行序列化
pickle模塊是Python自帶的一個(gè)標(biāo)準(zhǔn)模塊,專用于Python各種對(duì)象的序列化和反序列化,可用于Python內(nèi)置的各種數(shù)據(jù)對(duì)象(Python中一切都是對(duì)象),也可用于程序員自定義的類和對(duì)象。
pickle是python專用的,其序列化之后的數(shù)據(jù)格式也是python獨(dú)有,外部程序一般解不開(除非按照python pickle的數(shù)據(jù)標(biāo)準(zhǔn)編程)。
我們主要會(huì)用到pickle模塊的load,loads,dump,dumps這4個(gè)函數(shù)。load和dump兩個(gè)函數(shù),是將對(duì)象序列化存儲(chǔ)到二進(jìn)制文件中,和從二進(jìn)制文件中提取對(duì)象;loads和dumps這兩個(gè)函數(shù),是在程序運(yùn)行的內(nèi)存中操作。
將變量直接在內(nèi)存中序列化:
>>> 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內(nèi)置的二進(jìn)制對(duì)象。
下面的代碼,我們進(jìn)行反序列化,將存儲(chǔ)在內(nèi)存變量中的對(duì)象還原:
>>> list2 = pickle.loads(k)
>>> list2
[1, 2, 3, 4, 5]
>>> dict2 = pickle.loads(p)
>>> dict2
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
接下來(lái),我們測(cè)試將對(duì)象存儲(chǔ)在文件中,并將文件中的對(duì)象提取出來(lái):
>>> 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分別是寫入和讀出的文件句柄。(推薦:優(yōu)雅地使用Python的with as語(yǔ)句)
用戶自定的類和對(duì)象,均可以使用相同的方法進(jìn)行序列化存儲(chǔ)和發(fā)序列化。
注意:可以直接將一個(gè)類定義序列化,反序列化后,還是一樣的按照新賦值的名稱直接使用創(chuàng)建對(duì)象。
總結(jié)
以上是生活随笔為你收集整理的python中常用的序列化模块_使用pickle模块对python对象进行序列化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 睡觉怎么才能不做梦(睡觉总是做梦?)
- 下一篇: python telnetlib执行命令