python pickle的使用詳解及樣例

2021-09-28 15:04:32 字數 2652 閱讀 7229

pickle模組是以二進位制的形式序列化後儲存到檔案中(儲存檔案的字尾為」.pkl」),不能直接開啟進行預覽。而python的另乙個序列化標準模組json,則是human-readable的,可以直接開啟檢視(例如在notepad++中檢視)。

import pickle

a =

with open('text.txt','wb') as file:

pickle.dump(a,file)

with open('text.txt','rb') as file2:

b = pickle.load(file2)

print(type(b))

舉個例子:

乙個字典a = ,用pickle.dump存到本地檔案,所存資料的結構就是字典,而普通的file.write寫入檔案的是字串。讀取時,pickle.load返回的是乙個字典,file.read返回的是乙個字串。得到的b的型別是字典,b和a是等價的,也就是說pickle可以把字典、列表等結構化資料存到本地檔案,讀取後返回的還是字典、列表等結構化資料。而file.write、file.read訪問的物件是字串。

1.1 序列化方法pickle.dump()

pickle.dump(obj, file, protocol=none,*,fix_imports=true)
該方法實現的是將序列化後的物件obj以二進位制形式寫入檔案file中,進行儲存。它的功能等同於 pickler(file, protocol).dump(obj)。

關於引數file,有一點需要注意,必須是以二進位制的形式進行操作(寫入)。

import pickle

with open('svm_model_iris.pkl', 'wb') as f:

pickle.dump(svm_classifier, f)

file為'svm_model_iris.pkl',並且以二進位制的形式('wb')寫入。

關於引數protocol,一共有5中不同的型別,即(0,1,2,3,4)。(0,1,2)對應的是python早期的版本,(3,4)則是在python3之後的版本。

此外,引數可選 pickle.highest_protocol和pickle.default_protocol。當前,python3.5版本中,pickle.highest_protocol的值為4,pickle.default_protocol的值為3。當protocol引數為負數時,表示選擇的引數是pickle.highest_protocol。

1.2序列化方法pickle.dumps()

pickle.dumps()方法的引數如下:

pickle.dumps(obj, protocol=none,*,fix_imports=true)
pickle.dumps()方法跟pickle.dump()方法的區別在於,pickle.dumps()方法不需要寫入檔案中,它是直接返回乙個序列化的bytes物件。

2.反序列化方法pickle.load()

pickle.load(file, *,fix_imports=true, encoding=」ascii」. errors=」strict」)
該方法實現的是將序列化的物件從檔案file中讀取出來。它的功能等同於 unpickler(file).load()。

關於引數file,有一點需要注意,必須是以二進位制的形式進行操作(讀取)。

import pickle

with open('svm_model_iris.pkl', 'rb') as f:

model = pickle.load(f)

file為'svm_model_iris.pkl',並且以二進位制的形式('rb')讀取。

讀取的時候,引數protocol是自動選擇的,load()方法中沒有這個引數。

2.2 反序列化方法pickle.loads()

pickle.loads()方法的引數如下:

pickle.loads(bytes_object, *,fix_imports=true, encoding=」ascii」. errors=」strict」)
pickle.loads()方法跟pickle.load()方法的區別在於,pickle.loads()方法是直接從bytes物件中讀取序列化的資訊,而非從檔案中讀取。

2.3 反序列化方法unpickler(file).load()

pickle模組提供了反序列化的物件導向的類方法,即 class pickle.unpickler(file, *,fix_imports=true, encoding="ascii". errors="strict"),pickler類有load()方法。

unpickler(file).load() 實現的功能跟 pickle.load() 是一樣的。

關於unpickler類的其他method,請參考官方api。

對python pickle的理解

python 提供了pickle模組,能將物件進行序列化,將物件以檔案形式存放在磁碟。幾乎所有的資料型別 列表,字典,集合,類等 都可以用pickle來序列化。但是序列化後的資料可讀性很差。pickle最主要的兩個函式 pickle.dump obj,file protocol 序列化物件,並將結果...

python pickle模組的用法

pickle用於python特有的型別,和python的資料型別間進行轉換,提供四個功能 dumps,dump,loads,load.pickle 的用法 pickle.dumps 將資料通過特殊的形式轉換為只有python語言認識的字串 pickle.dump 將資料通過特殊的形式轉換只有pyth...

python pickle模組(泡菜)

前提 從檔案中讀取字串容易,但是讀取出數值比較不容易。如果使用read或者readlines方法都會返回乙個字串,可以使用int float等方法從字串中強制轉換為整型或者浮點型數值。若儲存的檔案像列表 字典 集合甚至類的例項這些更加複雜的資料型別時,就會有點難度。可以將這些資料型別轉換為字串再寫入...