Python 中的 Pickle 和 Unpickle 是什麼?


為了序列化和反序列化 Python 物件結構,我們在 Python 中有 Pickle 模組。pickle 模組實現了用於序列化和反序列化 Python 物件結構的二進位制協議。

Pickling 是將 Python 物件層次結構轉換為位元組流的過程。要序列化物件層次結構,只需呼叫 dumps() 函式。

Unpickling 是逆向操作。將來自二進位制檔案或類似位元組的物件的位元組流轉換回物件層次結構。要反序列化資料流,請呼叫 loads() 函式。

Pickling 和 unpickling 也被稱為序列化。

什麼可以被 pickle 和 unpickle?

在 Python 中,以下型別可以被 pickle:

  • None、True 和 False。
  • 整數、浮點數、複數。
  • 字串、位元組、位元組陣列。
  • 元組、列表、集合和字典,其中僅包含可 pickle 的物件。
  • 函式,內建和使用者定義的。

Pickle 模組常量

以下是 pickle 模組提供的常量:

  • pickle.HIGHEST_PROTOCOL - 可用的最高協議版本。整數值。

  • pickle.DEFAULT_PROTOCOL - 用於 pickling 的預設協議版本。整數值。當前預設協議為 4

Pickle 模組函式

以下是 pickle 模組提供的函式:

  • pickle.dump() - 將物件的 pickle 表示寫入開啟的檔案物件 file 中。

  • pickle.dumps() - 將物件的 pickle 表示作為位元組物件返回,而不是將其寫入檔案。

  • pickle.load() - 從開啟的檔案物件 file 中讀取物件的 pickle 表示。

  • pickle.loads() - 返回物件的 pickle 表示資料重建的物件層次結構

示例

首先,匯入 pickle 模組:

import pickle

我們建立了以下要 pickling 的輸入。

my_data = { 'BMW', 'Audi', 'Toyota', 'Benz'}

建立了 demo.pickle 檔案。此相同的 .pickle 檔案使用上述列表進行 pickling

with open("demo.pickle","wb") as file_handle: pickle.dump(my_data, file_handle, pickle.HIGHEST_PROTOCOL)

現在,解開上述 pickle 檔案並取回輸入值。

with open("demo.pickle","rb") as file_handle: res = pickle.load(file_handle) print(res_data)

現在讓我們看看完整的示例

import pickle # Input Data my_data = { 'BMW', 'Audi', 'Toyota', 'Benz'} # Pickle the input with open("demo.pickle","wb") as file_handle: pickle.dump(my_data, file_handle, pickle.HIGHEST_PROTOCOL) # Unpickle the above pickled file with open("demo.pickle","rb") as file_handle: res = pickle.load(file_handle) print(my_data) # display the output

輸出

{'Benz', 'Toyota', 'Audi', 'BMW'}

更新於: 2022-09-15

7K+ 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.