Python在文件中pickle/unpickle列表

Python在文件中pickle/unpickle列表,python,file-io,pickle,Python,File Io,Pickle,我有一个如下列表: a = [['a string', [0, 0, 0], [22, 'bee sting']], ['see string', [0, 2, 0], [22, 'd string']]] 我在保存和检索时遇到问题 我可以使用pickle保存它: with open('afile','w') as f: pickle.dump(a,f) 但是,当我尝试加载它时,会出现以下错误: pickle.load('afile') Traceback (most r

我有一个如下列表:

a = [['a string', [0, 0, 0], [22, 'bee sting']], ['see string', 
    [0, 2, 0], [22, 'd string']]]
我在保存和检索时遇到问题

我可以使用pickle保存它:

with open('afile','w') as f:
    pickle.dump(a,f)
但是,当我尝试加载它时,会出现以下错误:

pickle.load('afile')

Traceback (most recent call last):
  File "<pyshell#116>", line 1, in <module>
    pickle.load('afile')
  File "C:\Python27\lib\pickle.py", line 1378, in load
    return Unpickler(file).load()
  File "C:\Python27\lib\pickle.py", line 841, in __init__
    self.readline = file.readline
AttributeError: 'str' object has no attribute 'readline'

决定把它作为一个答案。pickle.load方法希望得到一个类似文件的对象,但您提供的是一个字符串,因此是一个异常。因此,不是:

pickle.load('afile')
你应该做:

pickle.load(open('afile', 'rb'))

要补充@Rapolas K的答案:

我发现文件未关闭时出现问题,因此使用此方法:

with open('afile','rb') as f:
     pickle.load(f)

当然要做pickle.load(打开('afile'))而不是pickle.load('afile')!谢谢-你为什么不把它作为一个答案呢..你不能轻易地把你拥有的转换成一个
numpy.array
,因为它有一个不规则的形状。您必须创建一个大的规则数组,然后用
NaN
或类似的东西填充所有数据……基本上就是
pandas
为您所做的。然而,对于你的小列表来说,这可能有些过分。可能
open('afile','rb')
pickle
文档中的注意事项:确保始终以二进制模式打开使用协议>=1创建的pickle文件。
with open('afile','rb') as f:
     pickle.load(f)