Python 醃製
Python pickle 模組用於序列化和反序列化 Python 物件結構。將任何型別的 Python 物件(列表、字典等)轉換為位元組流(0 和 1)的過程稱為醃製或序列化或扁平化或編組。我們可以透過稱為反醃製的過程將位元組流(透過醃製生成)轉換回 Python 物件。
為什麼要使用 Pickle?在現實世界中,醃製和反醃製的用途非常廣泛,因為它們允許我們輕鬆地將資料從一個伺服器/系統傳輸到另一個伺服器/系統,然後將其儲存在檔案或資料庫中。
注意事項:建議不要反醃製來自不受信任來源的資料,因為它們可能構成安全威脅。但是,pickle 模組無法在醃製惡意資料時識別或發出警報。
只有在匯入 pickle 模組後,我們才能進行醃製和反醃製。可以使用以下命令匯入 pickle:
import pickle
Pickle 示例
下面是一個關於如何醃製列表的簡單程式
醃製一個簡單的列表:Pickle_list1.py
import pickle
mylist = ['a', 'b', 'c', 'd']
with open('datafile.txt', 'wb') as fh:
pickle.dump(mylist, fh)在上面的程式碼中,列表“mylist”包含四個元素('a'、'b'、'c'、'd')。我們以“wb”模式而不是“w”模式開啟檔案,因為所有操作都在當前工作目錄中使用位元組進行。建立了一個名為“datafile.txt”的新檔案,它將 mylist 資料轉換為位元組流。
反醃製一個簡單的列表:unpickle_list1.py
import pickle
pickle_off = open ("datafile.txt", "rb")
emp = pickle.load(pickle_off)
print(emp)輸出:執行以上指令碼後,您可以再次看到 mylist 資料作為輸出。
['a', 'b', 'c', 'd']
醃製一個簡單的字典 -
import pickle
EmpID = {1:"Zack",2:"53050",3:"IT",4:"38",5:"Flipkart"}
pickling_on = open("EmpID.pickle","wb")
pickle.dump(EmpID, pickling_on)
pickling_on.close()反醃製一個字典 -
import pickle
pickle_off = open("EmpID.pickle", 'rb')
EmpID = pickle.load(pickle_off)
print(EmpID)執行以上指令碼(反醃製)後,我們獲得了我們之前初始化的字典。另外,請注意,因為我們在這裡讀取位元組,所以我們使用了“rb”而不是“r”。
輸出
{1: 'Zack', 2: '53050', 3: 'IT', 4: '38', 5: 'Flipkart'}Pickle 異常
以下是處理 pickle 模組時引發的一些常見異常 -
Pickle.PicklingError:如果 pickle 物件不支援醃製,則會引發此異常。
Pickle.UnpicklingError:如果檔案包含錯誤或損壞的資料。
EOFError:如果檢測到檔案結尾,則會引發此異常。
優點
方便儲存複雜資料。
易於使用,更輕量級,不需要多行程式碼。
生成的醃製檔案不容易閱讀,因此提供了一定的安全性。
缺點
除了 Python 之外的其他語言可能無法重建醃製的 Python 物件。
存在反醃製來自惡意來源資料的風險。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP