如何在 Python 中實現持久化物件?
要實現 Python 中的持久化物件,可以使用以下庫。
- shelve
- pickle
shelve 模組
“shelf” 是一個持久化的、類似字典的物件。它與“dbm”資料庫的區別在於,shelf 中的值(而不是鍵!)本質上可以是任意的 Python 物件——pickle 模組可以處理的任何東西。這包括大多數類例項、遞迴資料型別以及包含大量共享子物件的物體。
它有一些關鍵方法:
shelve.open() - 開啟一個持久化的字典。指定的 filename 是底層資料庫的基本檔名。作為副作用,可能會向檔名新增副檔名,並且可能會建立多個檔案。預設情況下,底層資料庫檔案以讀寫方式開啟。
shelve.sync() - 如果 shelf 以 writeback 設定為 True 開啟,則寫回快取中的所有條目。此外,如果可行,則清空快取並同步磁碟上的持久化字典。在 shelf 使用 close() 關閉時會自動呼叫此方法。
shelve.close() - 同步並關閉持久化字典物件。
pickle 模組
pickle 模組實現了用於序列化和反序列化 Python 物件結構的二進位制協議。
Pickling 是將 Python 物件層次結構轉換為位元組流的過程。要序列化物件層次結構,只需呼叫 dumps() 函式即可。
Unpickling 是逆向操作。將來自二進位制檔案或類位元組物件的位元組流轉換回物件層次結構。要反序列化資料流,請呼叫 loads() 函式。
Pickle 模組函式
以下是 pickle 模組提供的函式。
pickle.dump() - 將物件的 pickle 表示寫入開啟的檔案物件 file。
pickle.dumps() - 將物件的 pickle 表示作為位元組物件返回,而不是寫入檔案。
pickle.load() - 從開啟的檔案物件 file 讀取物件的 pickle 表示。
pickle.loads() - 返回物件的 pickle 表示資料重建的物件層次結構
示例
首先,匯入 pickle 模組:
import pickle
我們建立了以下要 pickled 的輸入。
my_data = { 'BMW', 'Audi', 'Toyota', 'Benz'}
建立了 demo.pickle 檔案。此相同的 .pickle 檔案使用上述列表進行 pickled。
with open("demo.pickle","wb") as file_handle: pickle.dump(my_data, file_handle, pickle.HIGHEST_PROTOCOL)
現在,解開上述 pickled 檔案,並取回輸入值。
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
輸出
set(['Benz', 'Toyota', 'BMW', 'Audi'])
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP