我有一個pickle文件,它在取消時拋出一個UnpicklingError: invalid load key, 'A'.
異常。無論我是否嘗試在生成文件的Ubuntu 14.04計算機上或在Windows計算機上分析該異常,都會拋出異常。它包含26個數據點,在數據點11之後拋出異常。我懷疑我必須以某種方式意外地編輯文件,儘管我不知道何時或如何。我知道還有其他幾個關於這類錯誤的討論,但到目前爲止,我還沒有找到一篇文章告訴我是否以及如何在錯誤輸入後恢復數值(我懷疑其中一個值是不可挽回地丟失了)。有什麼辦法可以跳過它,繼續取下下一個?可以例如反方向拔出,即最後一個元素在先?然後,我可以向後工作,直到我點擊錯誤的條目,從而獲得其他值。 (我可以重新生成數據,但它會採取一兩天,所以我寧願避免這樣做,如果我能。)cPickle:UnpicklingError:無效加載密鑰,'A'
這是酸洗代碼:
with open('hist_vs_years2.pkl', 'ab') as hist_pkl:
pickle.dump(hist, hist_pkl, -1)
這是取消代碼的代碼:
hist_vs_samples2 = []
more_values = True
with open('hist_vs_years2.pkl', 'rb') as hist_vs_samples_pkl:
while more_values == True:
try:
hist_vs_samples2.append(pickle.load(hist_vs_samples_pkl))
except EOFError:
more_values = False
我應該補充說我正在使用cPickle。如果我嘗試使用鹹菜我收到以下錯誤unpickle:
File "C:\Anaconda2\lib\pickle.py", line 1384, in load
return Unpickler(file).load()
File "C:\Anaconda2\lib\pickle.py", line 864, in load
dispatch[key](self)
KeyError: 'A'
請發佈pickle文件的相關部分。您的存儲代碼表明您只有一個對象,在這種情況下,您必須修復加載密鑰,因爲無法部分加載醃製對象。如果實際存儲了多個對象(不是多個對象的*列表*),則可以刪除已損壞的對象。如果你想自己做這個,'pickle.py'源文件列出了加載密鑰,這也解釋了格式。 – MisterMiyagi
我的歉意,酸洗代碼坐在一個更大的循環。它們確實是單獨的對象。你怎麼知道鹹菜文件的相關部分?在此期間,我會嘗試在網上找到解釋。 –
恐怕酸洗文件並不意味着用戶可讀。你必須自己挖掘它;爲了使它更簡單,打印所有工作對象的索引,然後從那裏搜索。 – MisterMiyagi