【问题标题】:Cannot do pickle.load不能做pickle.load
【发布时间】:2017-10-18 20:44:28
【问题描述】:

我无法在我的 VM 上执行简单的 pickle 加载。 这是它的简单演示代码。

root@bn18-6:~# 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,这在我的情况下是不可能的,

还有几个问题处理泡菜错误,但大多数问题都与文件打开模式有关。

【问题讨论】:

  • 如果您与r 有相同的行为,告诉我们,不要只在文本中断言它。 w 的失败并不令人意外——这是人们可以/应该期待的。

标签: python pickle


【解决方案1】:

您尝试加载的文件句柄 (p) 以 wb+ 模式打开。这会在打开文件时将文件截断为零长度,因此pickle.load 没有任何东西可以解开,因此EOFError。也许您打算改用rb+

【讨论】:

  • 我不知道它会截断文件。我将 pickle .dump 和 pickle.load 的模式替换为 rb+ 并且它可以工作。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2012-12-17
  • 2016-11-20
相关资源
最近更新 更多