【问题标题】:EOFError using pickle.load()EOFError 使用 pickle.load()
【发布时间】:2015-07-29 16:55:36
【问题描述】:

我有以下代码:

pos = [
    [('the', 'DT'), ('rabbit', 'NN'), ... ],
    [('he', 'PRP'), ('jokes', 'VBZ'), ... ],
    ...
]
with open(filename, 'w') as f:
    pickle.dump(pos, f)

那我要加载内容:

with open(filename, 'r') as f:
    pos = [pickle.load(f) for i in range(the_length)]

但是我得到了这个异常:

...

  File "C:\Anaconda\lib\pickle.py", line 1378, in load
    return Unpickler(file).load()

  File "C:\Anaconda\lib\pickle.py", line 858, in load
    dispatch[key](self)

  File "C:\Anaconda\lib\pickle.py", line 880, in load_eof
    raise EOFError

EOFError

实际上,pos 中的第一个列表已正确加载([('the', 'DT'), ('rabbit', 'NN'), ... ]),但紧随其后发生异常。 如果我打开文件,确实有问题:所有的句子都存储了,但文件以这样的长列表结尾:

aa(lp269
a(lp270
a(lp271
a(lp272
a(lp273
a(lp274
a(lp275
...
a(lp3531
a.

(我尝试使用 rbwb 而不是 rw 打开文件,但它没有解决任何问题)

【问题讨论】:

  • 您正在转储列表并尝试加载列表的元素。你必须加载一个列表
  • @MikeMcKerns 我认为在我的代码的先前版本中,我在循环中为pos 的每个列表调用了dump,这就是我在循环中调用load 的原因。谢谢。

标签: python python-2.7 pickle


【解决方案1】:

如果您只有一个dump 电话,那么您应该只有一个load 电话。

with open(filename, 'r') as f:
    pos = pickle.load(f)

【讨论】:

  • 好吧,我认为在我的代码的先前版本中,我在循环中为每个pos 列表调用了dump,这就是我在循环中调用load 的原因。我应该看到问题...谢谢。 (我明天上班前检查一下,接受你的回答)
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2013-03-21
  • 2012-05-11
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多