Python pickle模塊用法實(shí)例分析
本文實(shí)例講述了Python pickle模塊用法。分享給大家供大家參考。具體分析如下:
pickle提供了一個(gè)簡(jiǎn)單的持久化功能??梢詫?duì)象以文件的形式存放在磁盤上。
pickle.dump(obj, file[, protocol])
序列化對(duì)象,并將結(jié)果數(shù)據(jù)流寫入到文件對(duì)象中。參數(shù)protocol是序列化模式,默認(rèn)值為0,表示以文本的形式序列化。protocol的值還可以是1或2,表示以二進(jìn)制的形式序列化。
pickle.load(file)
反序列化對(duì)象。將文件中的數(shù)據(jù)解析為一個(gè)Python對(duì)象。
其中要注意的是,在load(file)的時(shí)候,要讓python能夠找到類的定義,否則會(huì)報(bào)錯(cuò):
比如下面的例子
import pickle
class Person:
def __init__(self,n,a):
self.name=n
self.age=a
def show(self):
print self.name+"_"+str(self.age)
aa = Person("JGood", 2)
aa.show()
f=open('d:\\p.txt','w')
pickle.dump(aa,f,0)
f.close()
#del Person
f=open('d:\\p.txt','r')
bb=pickle.load(f)
f.close()
bb.show()
如果不注釋掉del Person的話,那么會(huì)報(bào)錯(cuò)如下:
>>> JGood_2 Traceback (most recent call last): File "C:/py/test.py", line 15, in <module> bb=pickle.load(f) File "C:\Python27\lib\pickle.py", line 1378, in load return Unpickler(file).load() File "C:\Python27\lib\pickle.py", line 858, in load dispatch[key](self) File "C:\Python27\lib\pickle.py", line 1069, in load_inst klass = self.find_class(module, name) File "C:\Python27\lib\pickle.py", line 1126, in find_class klass = getattr(mod, name) AttributeError: 'module' object has no attribute 'Person'
意思就是當(dāng)前模塊找不到類的定義了。
clear_memo()
清空pickler的“備忘”。使用Pickler實(shí)例在序列化對(duì)象的時(shí)候,它會(huì)“記住”已經(jīng)被序列化的對(duì)象引用,所以對(duì)同一對(duì)象多次調(diào)用dump(obj),pickler不會(huì)“傻傻”的去多次序列化。
看下面的例子:
import StringIO
import pickle
class Person:
def __init__(self,n,a):
self.name=n
self.age=a
def show(self):
print self.name+"_"+str(self.age)
aa = Person("JGood", 2)
aa.show()
fle = StringIO.StringIO()
pick = pickle.Pickler(fle)
pick.dump(aa)
val1=fle.getvalue()
print len(val1)
pick.clear_memo()
pick.dump(aa)
val2=fle.getvalue()
print len(val2)
fle.close()
上面的代碼運(yùn)行如下:
>>> JGood_2 66 132 >>>
此時(shí)再注釋掉pick.clear_memo()后,運(yùn)行結(jié)果如下:
>>> JGood_2 66 70 >>>
主要是因?yàn)椋琾ython的pickle如果不clear_memo,則不會(huì)多次去序列化對(duì)象。
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
softmax及python實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了softmax及python實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
詳解如何使用python創(chuàng)建和結(jié)束線程
線程的創(chuàng)建和結(jié)束是多線程編程中的核心概念之一,在本文中,我們將學(xué)習(xí)如何使用 Python 創(chuàng)建線程,并探討如何優(yōu)雅地結(jié)束線程,需要的朋友可以參考下2024-04-04
梅爾倒譜系數(shù)(MFCC)實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了梅爾倒譜系數(shù)(MFCC)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
Python實(shí)現(xiàn)基于socket的udp傳輸與接收功能詳解
這篇文章主要介紹了Python實(shí)現(xiàn)基于socket的udp傳輸與接收功能,結(jié)合實(shí)例形式詳細(xì)分析了Python使用socket進(jìn)行udp文件傳輸與接收相關(guān)操作技巧及注意事項(xiàng),需要的朋友可以參考下2019-11-11
Keras中 ImageDataGenerator函數(shù)的參數(shù)用法
這篇文章主要介紹了Keras中 ImageDataGenerator函數(shù)的參數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
python實(shí)現(xiàn)簡(jiǎn)單的名片管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)名片管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
Django將項(xiàng)目移動(dòng)到新環(huán)境的操作步驟
本文分步驟給大家介紹Django將項(xiàng)目移動(dòng)到新環(huán)境的方法,通過(guò)圖文示例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-08-08
Python 圖像處理: 生成二維高斯分布蒙版的實(shí)例
今天小編就為大家分享一篇Python 圖像處理: 生成二維高斯分布蒙版的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07

