不能做pickle.load
问题描述:
我不能在虚拟机上做一个simpe pickle负载。 这是简单的演示代码。不能做pickle.load
[email protected]:~# python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pickle
>>> x = {1:2 }
>>> f = open ('demo', 'wb+')
>>> f
<open file 'demo', mode 'wb+' at 0x7fae71b44660>
>>> pickle.dump(x, f)
>>>
>>>
>>> f.close()
>>>
>>>
>>> p = open('demo', 'wb+')
>>> p
<open file 'demo', mode 'wb+' at 0x7fae71b446f0>
>>> a = pickle.load (p)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/pickle.py", line 1384, in load
return Unpickler(file).load()
File "/usr/lib/python2.7/pickle.py", line 864, in load
dispatch[key](self)
File "/usr/lib/python2.7/pickle.py", line 886, in load_eof
raise EOFError
EOFError
我已经使用酸洗和拆除前数次大数据,但没有遇到这个问题。我也尝试过'r+'
,'w+'
。
我发现This培训相关,但解决方案涉及增加RAM,这是不可能在我的情况,
还有一些处理泡菜错误的几个问题,但他们大多曾与文件打开方式的问题。
答
您尝试加载的文件句柄(p
)以模式wb+
打开。这会在打开时截断文件长度为零,所以pickle.load
没有取消任何操作,因此EOFError
。也许你打算使用rb+
来代替?
+0
我不知道它截断了文件。 我将模式替换为'rb +'来代替pickle.dump和pickle.load,它工作正常。谢谢 – Dave
如果你用'r',**给我们**得到相同的行为,不要在文本中断言它。 'w'的失败是完全不令人惊讶的 - 这是人们可以/应该期待的。 –