Python pickle/unpickle список в/из файла
У меня есть список, который выглядит так:
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
Ответы
Ответ 1
Решил сделать это как ответ. Метод pickle.load предполагает получение файла, подобного объекту, но вместо этого вы предоставляете строку и, следовательно, исключение. Поэтому вместо:
pickle.load('afile')
вам следует:
pickle.load(open('afile', 'rb'))
Ответ 2
Чтобы добавить к ответу @Rapolas K:
Я обнаружил, что у меня были проблемы с файлом, который не закрывается, поэтому использовал этот метод:
with open('afile','rb') as f:
pickle.load(f)