我有一个如下所示的列表:
a = [['a string', [0, 0, 0], [22, 'bee sting']], ['see string',
[0, 2, 0], [22, 'd string']]]
我在保存并检索它时遇到了问题。
我可以使用泡菜保存它:
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
,savez
或savetxt
。但是我收到以下错误:
>>> 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
答案 0 :(得分:34)
决定将其作为答案。 pickle.load方法希望得到一个像object这样的文件,但是你提供了一个字符串,因此是一个例外。所以而不是:
pickle.load('afile')
你应该这样做:
pickle.load(open('afile', 'rb'))
答案 1 :(得分:16)
添加@ Rapolas K的答案:
我发现我的文件没有关闭,所以使用了这个方法:
with open('afile','rb') as f:
pickle.load(f)