24

我有一个看起来像这样的列表:

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'

我曾认为我可以转换为 numpy 数组并使用save,savezsavetxt. 但是我收到以下错误:

>>> np.array([a])

Traceback (most recent call last):
  File "<pyshell#122>", line 1, in <module>
    np.array([a])
ValueError: cannot set an array element with a sequence
4

2 回答 2

41

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

pickle.load('afile')

你应该做:

pickle.load(open('afile', 'rb'))
于 2013-08-14T10:28:06.313 回答
18

要添加到@ Rapolas K 的答案:

我发现我有文件没有关闭的问题,所以使用了这个方法:

with open('afile','rb') as f:
     pickle.load(f)
于 2013-08-14T10:41:24.467 回答