Python pickle模塊用法實例分析
本文實例講述了Python pickle模塊用法。分享給大家供大家參考。具體分析如下:
pickle提供了一個簡單的持久化功能??梢詫ο笠晕募男问酱娣旁诖疟P上。
pickle.dump(obj, file[, protocol])
序列化對象,并將結(jié)果數(shù)據(jù)流寫入到文件對象中。參數(shù)protocol是序列化模式,默認值為0,表示以文本的形式序列化。protocol的值還可以是1或2,表示以二進制的形式序列化。
pickle.load(file)
反序列化對象。將文件中的數(shù)據(jù)解析為一個Python對象。
其中要注意的是,在load(file)的時候,要讓python能夠找到類的定義,否則會報錯:
比如下面的例子
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的話,那么會報錯如下:
>>> 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'
意思就是當前模塊找不到類的定義了。
clear_memo()
清空pickler的“備忘”。使用Pickler實例在序列化對象的時候,它會“記住”已經(jīng)被序列化的對象引用,所以對同一對象多次調(diào)用dump(obj),pickler不會“傻傻”的去多次序列化。
看下面的例子:
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()
上面的代碼運行如下:
>>> JGood_2 66 132 >>>
此時再注釋掉pick.clear_memo()后,運行結(jié)果如下:
>>> JGood_2 66 70 >>>
主要是因為,python的pickle如果不clear_memo,則不會多次去序列化對象。
希望本文所述對大家的Python程序設(shè)計有所幫助。
相關(guān)文章
Python設(shè)計模式編程中Adapter適配器模式的使用實例
這篇文章主要介紹了Python設(shè)計模式編程中Adapter適配器模式的使用實例,一般來說適配器模式可以細分為類適配器和對象適配器模式,需要的朋友可以參考下2016-03-03Tensorflow實現(xiàn)AlexNet卷積神經(jīng)網(wǎng)絡(luò)及運算時間評測
這篇文章主要為大家詳細介紹了Tensorflow實現(xiàn)AlexNet卷積神經(jīng)網(wǎng)絡(luò)及運算時間評測,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05python自動化測試三部曲之unittest框架的實現(xiàn)
這篇文章主要介紹了python自動化測試三部曲之unittest框架的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10Python3.6連接Oracle數(shù)據(jù)庫的方法詳解
這篇文章主要介紹了Python3.6連接Oracle數(shù)據(jù)庫的方法,較為詳細的分析了cx_Oracle模塊安裝及Python3.6使用cx_Oracle模塊操作Oracle數(shù)據(jù)庫的具體操作步驟與相關(guān)注意事項,需要的朋友可以參考下2018-05-05