python:pickle.load()引发EOFError

est*_*stu 6 python pickle python-2.7

我有一个使用.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
Run Code Online (Sandbox Code Playgroud)

我得到了这个错误

    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
Run Code Online (Sandbox Code Playgroud)

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

 with open("filenamereal3.txt", "wb") as f:
    pickle.dump(result, f)
f.close()
Run Code Online (Sandbox Code Playgroud)

我用read二进制('rb')来加载和写二进制('wb')来写,但它仍然有错误.你知道它为什么还是错误吗?我该如何解决这个错误?

谢谢您的帮助....

Dav*_*vid 11

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

这似乎是pickle库的一个bug.我用cPickle解决了它.

import cPickle as pickle
Run Code Online (Sandbox Code Playgroud)


Nei*_*o_O 7

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

加载数据应如下所示:

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

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