J'ai une liste qui ressemble à ceci:
a = [['a string', [0, 0, 0], [22, 'bee sting']], ['see string',
[0, 2, 0], [22, 'd string']]]
et j'ai des problèmes pour l'enregistrer et le récupérer.
Je peux l'enregistrer en utilisant du cornichon:
with open('afile','w') as f:
pickle.dump(a,f)
mais j'obtiens l'erreur suivante lorsque j'essaye de la charger:
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'
J'avais pensé que je pouvais convertir en un tableau numpy et utiliser save
, savez
ou savetxt
. Cependant, j'obtiens l'erreur suivante:
>>> 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
Décidé de le faire comme réponse. La méthode pickle.load s'attend à obtenir un objet de type fichier, mais vous fournissez une chaîne à la place, et donc une exception. Donc au lieu de:
pickle.load('afile')
tu devrais faire:
pickle.load(open('afile', 'rb'))
Pour ajouter à la réponse de @ Rapolas K:
J'ai trouvé que j'avais des problèmes avec le fichier qui ne se fermait pas, j'ai donc utilisé cette méthode:
with open('afile','rb') as f:
pickle.load(f)