Pickle 是 Python 提供的一個內建模組,
專門用於將 Python 物件序列化(serialize)和反序列化(deserialize)。它將 Python 物件轉換為二進制格式,便於儲存到檔案或傳輸到網路上,並且能夠隨時還原成原始的 Python 物件。
import pickle
pickle.dump()
方法,可以將 Python 物件序列化後儲存在檔案中:# 要儲存的物件
data = {"name": "Alice", "age": 30, "languages": ["Python", "C++", "Java"]}
# 打開檔案,以二進制寫入模式(wb)
with open("data.pkl", "wb") as file:
pickle.dump(data, file)
print("資料已序列化並儲存到檔案 data.pkl")
# 打開檔案,以二進制讀取模式(rb)
with open("data.pkl", "rb") as file:
loaded_data = pickle.load(file)
print("從檔案中還原的資料:", loaded_data)
保存和還原工作進度
如果程式執行需要很長時間,pickle 可用於保存執行的中間狀態,避免重複執行相同的操作。
例如:
長時間運行的數據處理工作中保存進度,然後在程序崩潰或中斷時還原。
快速測試或臨時保存
在開發和測試中,pickle 可以用來臨時保存數據以快速調試或測試功能。
安全性問題:
pickle 無法防範惡意數據,因此不要反序列化(pickle.load)不受信任的來源的數據。
與 JSON 的選擇:
當數據只包含基本類型(如字典、列表、數字、字符串等)時,應優先使用 JSON,因為 JSON 可讀性高且跨語言支持。
若數據包含複雜 Python 特定結構(如自訂類別或函數),可使用 pickle。
shelve 是 Python 標準庫中一個方便的模組,
用於將 Python 物件存儲到一個類似字典的持久化對象中。
它結合了 pickle 的序列化能力和簡單的鍵值存取方式,
使得開發者可以輕鬆地保存和讀取 Python 的數據結構到文件中,
而不需要自己處理文件操作和序列化細節。
import shelve
# 開啟一個 shelve 檔案
with shelve.open("mydata") as db:
# 儲存數據
db["name"] = "Alice"
db["age"] = 30
db["skills"] = ["Python", "C++", "Java"]
# 從檔案中讀取數據
print(db["name"]) # 輸出: Alice
print(db["age"]) # 輸出: 30
print(db["skills"]) # 輸出: ['Python', 'C++', 'Java']
特性 | Shelve | Pickle | JSON | SQLite |
---|---|---|---|---|
儲存格式 | 類似字典的檔案 | 二進制檔案 | 文本檔案 | 數據庫檔案 |
可讀性 | 低 | 低 | 高 | 高 |
數據類型支持 | 任意 Python 對象 | 任意 Python 對象 | 基本數據類型 | 基本數據類型 |
操作方式 | 類似字典 | 程序控制序列化/反序列化 | 程序控制序列化/反序列化 | SQL 操作 |
應用場景 | 小型數據持久化存儲 | 任意序列化需求 | 跨語言數據傳輸 | 結構化數據存儲 |