Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python EOFError:输入pickle.load用完,文件不为空_Python_Python 3.x_Pickle - Fatal编程技术网

Python EOFError:输入pickle.load用完,文件不为空

Python EOFError:输入pickle.load用完,文件不为空,python,python-3.x,pickle,Python,Python 3.x,Pickle,您好,我有以下问题: 我有一些数据,我已经整理过了。数据是一个字典,每个键都有一个3d numpy数组。数据大小约为3 GB,我可以在显示的第一行中读取 f = open("data.txt","rb") print(f.readline()) f.close() > b'\x80\x03}q\x00(G@\x1a\xe1G\xae\x14z\xe1G@\x1a\xcc\xcc\xcc\xcc\xcc\xcd\x86q\x01}q\x02(X\x04\x00\x00\x00GABAq\x

您好,我有以下问题:

我有一些数据,我已经整理过了。数据是一个字典,每个键都有一个3d numpy数组。数据大小约为3 GB,我可以在显示的第一行中读取

f = open("data.txt","rb")
print(f.readline())
f.close()

> b'\x80\x03}q\x00(G@\x1a\xe1G\xae\x14z\xe1G@\x1a\xcc\xcc\xcc\xcc\xcc\xcd\x86q\x01}q\x02(X\x04\x00\x00\x00GABAq\x03cnumpy.core.multiarray\n'
但是,如果我尝试使用

f = open("data.txt","rb")
data = pickle.load(f)
f.close()

我只收到错误消息“EOFError:输入不足”

一些附加信息:我自己使用相同的PC和Python(3.7.3)/Pickle版本对数据进行了Pickle

我搜索了一下,有几个人遇到了这个问题,解决办法是他们的文件是空的。我没有发现任何有用的东西

提前谢谢

附言: 我使用以下方法对数据进行了pickle处理:

f = open("data.txt","wb")
pickle.dump(data,f) 
f.close()

我经常在较小的数据集上使用这段代码,从来没有遇到过任何问题

在二进制文件上使用
readline()
没有任何意义,即使它“有效”,也证明不了什么。问题可能在于您如何对数据进行pickle处理,但您的问题目前没有显示这一点。@martineau使用readline()证明文件不是空的。关于我是如何处理数据的,请参见edit。问题可能是因为对象太大了。尝试使用
protocol=4
,它增加了对超大对象的支持(请参阅模块文档部分中的“protocol version 4”)。@martineau是的,我也考虑过这一点。这将需要重新模拟数据,这是。。。痛苦。这很不幸,但协议4允许-这对于超过2GB的对象是必需的。考虑以某种方式创建(快速生成)“模拟”对象,并将其两种方式倾倒,以验证是否切换到协议4将解决问题。
f = open("data.txt","wb")
pickle.dump(data,f) 
f.close()