在Python 中使用物件時,通常需要儲存它們的狀態以便日後使用或在不同的應用程式之間共享。這個過程通常稱為資料持久化。
Python 標準函式庫提供了一個強大的工具來持久化對象,稱為 pickle 模組。它允許您序列化對象,有效地將它們轉換為可以寫入檔案或透過網路傳輸的位元組流。以下是示範其用法的範例:
import pickle # Create a Company object company1 = Company('banana', 40) # Open a file for writing with open('company_data.pkl', 'wb') as outp: # Serialize the object and store it in the file pickle.dump(company1, outp, pickle.HIGHEST_PROTOCOL) # Open a file for reading with open('company_data.pkl', 'rb') as inp: # Deserialize the object and load it into memory company1 = pickle.load(inp) # Retrieve and print the object's attributes print(company1.name) # 'banana' print(company1.value) # 40
您也可以定義一個簡單的實用函數來處理序列化過程:
def save_object(obj, filename): with open(filename, 'wb') as outp: pickle.dump(obj, outp, pickle.HIGHEST_PROTOCOL) # Usage save_object(company1, 'company1.pkl')
cPickle(或_pickle)與pickle:
為了獲得更快的效能,請考慮使用 cPickle 模組,它是 pickle 模組的 C 實作。效能差異很小,但 C 版本明顯更快。在Python 3中,cPickle被重新命名為_pickle。
資料流格式(協定):
pickle支援多種稱為協定的資料流格式。可用的最高協定取決於所使用的 Python 版本,在 Python 3.8.1 中,預設使用協定版本 4。
多個物件:
a pickle檔案可以包含多個 pickled 物件。要儲存多個對象,可以將它們放置在列表、元組或字典等容器中,然後序列化為單一檔案。
自訂載入器:
如果您不知道pickle 檔案中儲存了多少個對象,您可以使用如下所示的自訂載入器函數來迭代並加載它們全部:
def pickle_loader(filename): with open(filename, "rb") as f: while True: try: yield pickle.load(f) except EOFError: break
以上是如何使用 Pickle 模組在 Python 中有效地持久化物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!