我有一个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