gpt4 book ai didi

python - c pickle : UnpicklingError: invalid load key, 'A'

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:41 25 4
gpt4 key购买 nike

我有一个 pickle 文件,在解封时会抛出 UnpicklingError: invalid load key, 'A'. 异常。无论我尝试在生成文件的 Ubuntu 14.04 计算机上还是在我的 Windows 计算机上分析它,都会引发异常。它包含 26 个数据点,并且在数据点 11 之后引发异常。我怀疑我一定是意外编辑了该文件,但我不知道何时或如何编辑。我知道还有其他一些关于此类错误的讨论,但到目前为止,我还没有找到一篇文章告诉我是否以及如何在错误输入后恢复这些值(我怀疑其中一个值已经不可挽回地丢失了) )。有什么办法可以跳过它并继续解压下一个吗?可以例如反方向解封,即先最后一个元素?然后我可以向后工作,直到找到错误的条目,从而获得其他值。 (我可以重新生成数据,但这需要一两天的时间,所以如果可以的话,我宁愿避免这样做。)

这是 pickle 的代码:

with open('hist_vs_years2.pkl', 'ab') as hist_pkl:
pickle.dump(hist, hist_pkl, -1)

这是 unpickle 的代码:

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。如果我尝试使用 pickle 进行 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 文件中,因此,如果一个对象损坏,可以将其删除,而不会损坏其他对象。

原则上,pickle 格式是在 pickle.py 中伪记录的。对于大多数情况,模块开头的操作码足以拼凑出正在发生的事情。基本上,pickle 文件是有关如何构建对象的说明。

pickle 文件的可读性取决于它的 pickle 格式 - 0 是可行的,以上所有内容都困难。是否可以修复或必须删除完全取决于此。一致的是每个 pickle 都以点(.)结尾。例如,b'Va\np0\n.'b'\x80\x04\x95\x05\x00\x00\x00\x00\x00\x00\x00\x8c\x01a\x94.' 都是字符“a”,但在协议(protocol) 0 和 4 中。

最简单的恢复形式是计算可以加载的对象数量:

with open('/my/pickle.pkl', 'rb') as pkl_source:
idx = 1
while True:
pickle.load(pkl_source)
print(idx)
idx += 1

然后打开 pickle 文件,跳过尽可能多的对象并删除直到下一个 的所有内容。

关于python - c pickle : UnpicklingError: invalid load key, 'A',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39830198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com