Python中的pickle模組

2021-09-26 19:30:39 字數 2390 閱讀 3233

鏈客,專為開發者而生,有問必答!

pickle模組的作用

pickle模組用於將python物件序列化為位元組流,可儲存在檔案或資料庫中,也可同通過網路進行傳輸。使用反序列化(unpickle)可以將生成的位元組流轉換回python物件。「pickling」是將python物件層次結構轉換為位元組流的過程,「unpickling」是反向操作,從而將位元組流(來自二進位制檔案或類似位元組的物件)轉換回物件層次結構。酸洗(或去除)也可稱為「序列化」,「編組」,不要將其與marshal模組混淆或「扁平化」; 但是,為了避免混淆,這裡使用的術語是「酸洗」和「破壞」。

什麼叫序列化?

把物件在記憶體中的結構轉換成便於儲存或傳輸的二進位制或文字格式,而且以後可以在同乙個系統或不同的系統中重建物件的副本。pickle模組能把任何python物件序列化成二進位制格式。

函式的運用

pickle模組中dump()函式與load()函式的運用

pickle模組提供以下常量:

pickle.highest_protocol

整數,可用的最高協議版本。該值可以作為協議值傳遞給函式dump()和dumps()以及pickler建構函式。

pickle.default_protocol

乙個整數,用於酸洗的預設協議版本。可能小於最高協議。目前預設的協議是3,這是為python 3設計的新協議。

pickle模組提供以下功能,使酸洗過程更加方便:

pickle.dump(obj,file,protocol = none,*,fix_imports = true )

將obj的pickle d表示寫入開啟的檔案物件檔案。這相當於。 pickler(file, protocol).dump(obj)

可選的協議引數,乙個整數,告訴pickler使用給定的協議; 支援的協議是0到highest_protocol。如果未指定,則預設為default_protocol。如果指定了負數,highest_protocol則選擇。

檔案引數必須有乙個接受單位元組引數的write()方法。因此,它可以是乙個為二進位制寫入而開啟的磁碟上檔案、乙個io.bytesio例項或滿足此介面的任何其他自定義物件。

如果fix_匯入為真,且協議小於3,pickle將嘗試將新的python 3名稱對映到python 2中使用的舊模組名稱,以便pickle資料流可以用python 2讀取。

pickle.dumps(obj,protocol =none,*,fix_imports = true )

將物件的pickled表示作為bytes物件返回,而不是將其寫入檔案。

arguments協議和fix_匯入的含義與dump()中的含義相同。

pickle.load(file,*,fix_imports = true,encoding =「ascii」,errors =「strict」 )

從開啟的檔案物件檔案中讀取pickled物件表示,並返回其中指定的重新構建的物件層次結構。這相當於unpickler(file.load()。

自動檢測pickle的協議版本,因此不需要協議引數。超過pickled物件表示形式的位元組將被忽略。

引數檔案必須有兩個方法,乙個採用整數引數的read()方法和乙個不需要引數的readline()方法。兩種方法都應返回位元組。因此,檔案可以是為二進位制讀取而開啟的磁碟上檔案、io.bytesio物件或滿足此介面的任何其他自定義物件。

可選關鍵字引數包括fix_匯入、編碼和錯誤,這些引數用於控制由python 2生成的pickle流的相容性支援。如果fix_imports為true,pickle將嘗試將舊的python 2名稱對映到python 3中使用的新名稱。編碼和錯誤告訴pickle如何解碼由python 2處理的8位字串例項;它們分別預設為』ascii』和』strict』。編碼可以是「位元組」,以將這些8位字串例項讀取為位元組物件。需要使用encoding='latin1』來取消拾取由python 2處理的numpy陣列和date time、日期和時間例項。

pickle.loads(bytes_object,*,fix_imports = true,encoding =「ascii」,errors =「strict」 )

從bytes物件讀取pickled物件層次結構,並返回其中指定的重新構建的物件層次結構。

自動檢測pickle的協議版本,因此不需要協議引數。超過pickled物件表示形式的位元組將被忽略。

可選關鍵字引數包括fix_匯入、編碼和錯誤,這些引數用於控制由python 2生成的pickle流的相容性支援。如果fix_imports為true,pickle將嘗試將舊的python 2名稱對映到python 3中使用的新名稱。編碼和錯誤告訴pickle如何解碼由python 2處理的8位字串例項;它們分別預設為』ascii』和』strict』。編碼可以是「位元組」,以將這些8位字串例項讀取為位元組物件。需要使用encoding='latin1』來取消拾取由python 2處理的numpy陣列和date time、日期和時間例項。

python 中的pickle資料序列化模組

python的pickle模組實現了基本的資料序列和反序列化。通過pickle模組的序列化操作我們能夠將程式中執行的物件資訊儲存到檔案中去,永久儲存 通過pickle模組的反序列化操作,我們能夠從檔案中建立上一次程式儲存的物件。基本介面 pickle.dump obj,file,protocol 註...

python模組(json和pickle模組)

json和pickle模組,兩個都是用於序列化的模組 json模組,用於字串與python資料型別之間的轉換 pickle模組,用於python特有型別與python資料型別之間的轉換 兩個模組,都提供了dumps,dump,loads,load 4個功能 1 import json 2 s 用js...

python中的pickle模組

它可以序列化 物件並儲存到磁碟中,並在需要的時候讀取出來,任何物件都可以執行序列化操作。那麼什麼又是序列化呢?簡單來說,序列化就是用來處理物件流的機制。所謂物件流也就是將物件的內容進行流化,流的概念這裡不用多說 就是i o 我們可以對流化後的物件進行讀寫操作,也可將流化後的物件傳輸於網路之間 注 要...