【问题标题】:Bad Pickle get error坏泡菜得到错误
【发布时间】:2009-03-29 06:08:20
【问题描述】:

我一直在使用一个名为 Mnemosyne 的闪存卡程序,它使用 python 脚本。不久前,我的电脑死机后,我的闪存卡数据库无法访问,我不得不手动关闭它。每当我尝试加载包含我的卡的数据库时,我都会收到此错误。

文件格式无效 Traceback(最里面的最后一个): 文件“mnemosyne\core\mnemosyne_core.pyc”,第 1012 行,在 load_database BadPickleGet: 577"

我们将不胜感激。

【问题讨论】:

  • 发布源代码会有所帮助
  • 源可能不可用。听起来这是一个第三方程序,并且trace是一个.pyc。如果您有 mnemosyne\core\mnemosyne_core.py 文件,请尝试在此处发布其中的一些内容。
  • 我有一个核心文件,但是它相当大,我不知道如何将文件附加到这个论坛,您是否建议发布文件的任何特定部分?
  • 在任何其他情况下,这个标题都会很奇怪。

标签: python pickle


【解决方案1】:

(虽然 CLayton 的副本可能是二进制发行版,但 mnemosyne 的源代码是免费提供的。)

但这并没有多大帮助:第 1012 行只是:

db = cPickle.load(infile)

其中“infile”是存储的数据库文件。所以你的数据库文件中有一些损坏。 (BadPickleGet 是 UnpicklingError 的特定子类,这是您在输入中断时所期望的。)

您可以更改 mnemosyne_core.py 以使用普通的 Python pickle 模块而不是 cPickle,从而允许您在 pickle.py 中添加调试并准确计算出它不喜欢的文件中的内容。但老实说,如果文件由于硬件故障/硬关机而损坏,则内容可能会被截断、无法读取或完全是垃圾。

准备重新审视那些早期的牌......

【讨论】:

  • 哦,谢谢你的帮助,有没有最好的手工提取卡片的方法?该脚本可能有点难以通过,我想取出 800 张卡,特别是属于一个类别,所以任何筛选 python 脚本的方法都会非常有帮助
  • 您可以尝试使用 pickletools.dis() 检查数据。如果你有截断的数据,这至少会告诉你你有多少。我怀疑你可能已经失去了很多。
猜你喜欢
  • 2018-09-09
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多