【问题标题】:python: pickle.load() raising EOFErrorpython: pickle.load() 引发 EOFError
【发布时间】:2023-03-24 10:30:01
【问题描述】:

我有一个使用 .txt 格式的泡菜文件。我想用 python 2.7 加载这个泡菜文件。大小为 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

这是我用来写泡菜的代码:

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

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

感谢您的帮助......

【问题讨论】:

  • 我们看不到您正在解压哪个文件,您确定它是正确的吗?你真的在rb 模式下打开它吗?如果我们能看到您用于解封的代码,那就太好了。
  • @Rawing 抱歉,我已经编辑过了
  • 您正在转储到filenamereal3,但正在加载filenamereal2
  • 虽然可能不是你的情况,EOFError 也可能在你试图读取一个空文件时发生。

标签: python python-2.7 pickle


【解决方案1】:

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

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

import cPickle as pickle

【讨论】:

  • 这个解决方案对我有用。似乎 pickle 对大文件有问题,而 cPickle 没有。
  • 读者,这可能不适合您的情况。考虑在您尝试读取它时可能正在写入一个大的泡菜文件。这就是我的问题
【解决方案2】:

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

加载数据应如下所示:

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

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

【讨论】:

  • 感谢您的建议,但我在没有 f.close() 的情况下使用了该代码,但这是关于 valueerror i/o operation on closed file 的错误,因此建议我使用它。但是在错误解决之后。该代码有一个EOFError
  • @estu 那我就不知道怎么解决了!您的代码看起来非常好。确保您的文件没有损坏/损坏。此外,您可以阅读有关文件结束错误的文档,并确保您正在腌制的任何东西都是可腌制的。
【解决方案3】:

确保您的泡菜文件不为空,例如如果你腌制一个未初始化的变量。

【讨论】:

    【解决方案4】:

    我遇到了同样的问题。我正在从 .txt 文件中读取类对象。这似乎对我有用:

    try: 
        <my code>
    except EOFError:
         break
    

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 2016-08-31
      相关资源
      最近更新 更多