[英]Python : How to read pickle dump?
我有一個朋友送來的醬菜堆,他要我像這樣閱讀:
f = open('file.pickle')
import pickle
l = pickle.loads(f.read())
但是我收到一個ImportError
說no module named sql.models
有人可以幫助我了解發生了什么嗎?
您缺少重建腌制對象所需的代碼。
泡菜和實例屬性一起存儲可以從中導入類的位置。 仍然需要原始模塊來重新創建該模塊。 從文檔中 :
請注意,函數(內置的和用戶定義的)是通過“完全限定”的名稱引用而不是值進行酸洗的。 這意味着僅對函數名稱以及在其中定義該函數的模塊的名稱進行腌制。既不腌制函數的代碼,也不腌制其任何函數屬性。 因此,定義模塊必須在解酸環境中是可導入的,並且該模塊必須包含命名對象,否則將引發異常。 [4]
同樣,通過命名引用對類進行酸洗,因此在未酸洗環境中也適用相同的限制。 請注意,沒有對類的代碼或數據進行酸洗,因此在以下示例中,不會在取消酸洗的環境中還原類屬性
attr
:class Foo: attr = 'a class attr' picklestring = pickle.dumps(Foo)
這些限制是為什么必須在模塊的頂層定義可選擇的函數和類的原因。
換句話說,用於創建泡菜的原始數據包括自定義類的至少一個實例,該實例起源於名為sql.models
的模塊。
請仔細閱讀甚至從朋友那里讀取的任意腌制食品。 泡菜只是一種可重新創建任意Python結構的堆棧語言。 您可以構造一個泡菜,以足夠的決心和技巧在計算機上生成一個秘密的后門服務器。 pickle
記錄會明確警告您:
警告 :
pickle
模塊並非旨在防止錯誤或惡意構建的數據。 切勿挑剔從不可信或未經身份驗證的來源收到的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.