1. 程式人生 > 其它 >Python學習筆記之pickle模組

Python學習筆記之pickle模組

技術標籤:Python學習筆記python

Python pickle模組學習

pickle提供了一個簡單的持久化功能。可以將物件以檔案的形式存放在磁碟上。


pickle.dump(obj, file[, protocol])
  序列化物件,並將結果資料流寫入到檔案物件中。引數protocol是序列化模式,預設值為0,表示以文字的形式序列化。protocol的值還可以是1或2,表示以二進位制的形式序列化。


pickle.load(file)
  反序列化物件。將檔案中的資料解析為一個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的話,那麼會報錯如下:
在這裡插入圖片描述
意思就是當前模組找不到類的定義了。


clear_memo()
  清空pickler的“備忘”。使用Pickler例項在序列化物件的時候,它會“記住”已經被序列化的物件引用,所以對同一物件多次呼叫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()

上面的程式碼執行如下:
在這裡插入圖片描述
如果不註釋掉,則執行結果是第一個。如果註釋掉,那麼執行結果是第二個。

主要是因為,python的pickle如果不clear_memo,則不會多次去序列化物件。

(以上轉載自他人,便於自己學習記錄)