python: pickle.load() 引发 EOFError

新手上路,请多包涵

我有一个使用 .txt 格式的 pickle 文件。我想用 python 2.7 加载这个 pickle 文件。大小为 438.5 MB。这就是我加载数据的方式:

 def readpickle(path="C:/Python27/Lib/site-packages/xy/"):
with open(path+"filenamereal2.txt","rb") as f:
    model = pickle.load(f)

return model

我得到这个错误

    itemmodelreal=readpickle(path="C:/Users/Lab Komputasi/Documents/estu/")
Traceback (most recent call last):
File "<ipython-input-33-265e46f74915>", line 1, in <module>
    itemmodelreal=readpickle(path="C:/Users/Lab Komputasi/Documents/estu/")

  File "<ipython-input-31-fbd3e8b9e043>", line 3, in readpickle
    model = pickle.load(f)

  File "C:\Users\Lab Komputasi\Anaconda2\lib\pickle.py", line 1384, in load
    return Unpickler(file).load()

  File "C:\Users\Lab Komputasi\Anaconda2\lib\pickle.py", line 864, in load
    dispatch[key](self)

  File "C:\Users\Lab Komputasi\Anaconda2\lib\pickle.py", line 886, in load_eof
    raise EOFError

EOFError

这是我用来编写 pickle 的代码:

  with open("filenamereal3.txt", "wb") as f:
    pickle.dump(result, f)
f.close()

我已经使用读取二进制(’rb’)加载和写入二进制(’wb’)写入,但它仍然有那个错误。你知道为什么它仍然是错误的吗?我该如何解决这个错误?

谢谢您的帮助….

原文由 estu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 776
2 个回答

要加载数据,您不想读取数据(“rb”)而不是写入数据(“wb”)吗?

加载数据应如下所示:

  with open("C:/Users/Lab Komputasi/Documents/estu/filenamereal1.txt", "rb") as f:
     data = pickle.load(f)

此外,使用 f.close() 是不必要的,因为您使用的是 with/as 子句。

原文由 Neil Chowdhury o_O 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在加载以最高协议转储的大文件时遇到了同样的错误。

这似乎是 pickle 库的一个错误。我改用 cPickle 解决了它。

 import cPickle as pickle

原文由 David 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题