次のようなリストがあります。
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
、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
答えとしてそれをすることにしました。 pickle.loadメソッドはオブジェクトのようなファイルを取得することを想定していますが、代わりに文字列を提供しているため、例外が提供されます。代わりに:
pickle.load('afile')
やったほうがいい:
pickle.load(open('afile', 'rb'))
@ Rapolas Kの回答に追加するには:
ファイルが閉じないという問題があるため、この方法を使用しました。
with open('afile','rb') as f:
pickle.load(f)