經常遇到在Python程序運行中得到了一些字符串、列表、字典等數據,想要長久的保存下來,方便以後使用,而不是簡單的放入內存中關機斷電就丟失數據。
這個時候Pickle模塊就派上用場了,它可以將對象轉換爲一種可以傳輸或存儲的格式。
python的pickle模塊實現了基本的數據序列和反序列化。通過pickle模塊的序列化操作我們能夠將程序中運行的對象信息保存到文件中去,永久存儲;通過pickle模塊的反序列化操作,我們能夠從文件中創建上一次程序保存的對象。
一、Pickle對象串行化
Pickle模塊將任意一個Python對象轉換成一系統字節的這個操作過程叫做串行化對象。
二、Pickle與CPickle對比
前者是完全用Python來實現的模塊,這個CPickle是用C來實現的,它的速度要比pickle快好多倍,一般建議如果電腦中只要有CPickle的話都應該使用它。
三、Pickle模塊的dump()方法
在Pickle模塊中有2個常用的函數方法,一個叫做dump(),另一個叫做load()。
第三部分, pickle.dump()方法:
這個方法的語法是:pickle.dump(對象, 文件,[使用協議])
提示:將要持久化的數據“對象”,保存到“文件”中,使用有3種,索引0爲ASCII,1是舊式2進制,2是新式2進制協議,不同之處在於後者更高效一些。
默認的話dump方法使用0做協議。
四、Pickle模塊的load方法
load()方法的作用正好與上面的dump()方法相反,上面是序列化數據,這個方法作用是反序列化。
語法:pickle.load(文件)
提示:從“文件”中,讀取字符串,將它們反序列化轉換爲Python的數據對象,可以正常像操作數據類型的這些方法來操作它們。
A Simple Code
#使用pickle模塊將數據對象保存到文件 import pickle data1 = {'a': [1, 2.0, 3, 4+6j], 'b': ('string', u'Unicode string'), 'c': None} selfref_list = [1, 2, 3] selfref_list.append(selfref_list) output = open('data.pkl', 'wb') # Pickle dictionary using protocol 0. pickle.dump(data1, output) # Pickle the list using the highest protocol available. pickle.dump(selfref_list, output, -1) output.close()
#使用pickle模塊從文件中重構python對象 import pprint, pickle pkl_file = open('data.pkl', 'rb') data1 = pickle.load(pkl_file) pprint.pprint(data1) data2 = pickle.load(pkl_file) pprint.pprint(data2) pkl_file.close()