web-dev-qa-db-fra.com

Le moyen le plus simple de persister une structure de données à un fichier de Python?

Disons que j'ai quelque chose comme ça:

d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }

Quel est le moyen le plus simple de prochargmatiquement Obtenir cela dans un fichier que je peux charger de python plus tard?

Puis-je l'enregistrer en quelque sorte comme python source (à partir d'un fichier A python Script, non manuellement!), Alors import plus tard?

Ou devrais-je utiliser JSON ou quelque chose?

35
Blorgbeard is out

Utilisez le module cornichon .

import pickle
d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }
afile = open(r'C:\d.pkl', 'wb')
pickle.dump(d, afile)
afile.close()

#reload object from file
file2 = open(r'C:\d.pkl', 'rb')
new_d = pickle.load(file2)
file2.close()

#print dictionary object loaded from file
print new_d
61
eric.christensen

Essayez le module d'étagère qui vous donnera un dictionnaire persistant, par exemple:

import shelve
d = { "abc" : [1, 2, 3], "qwerty" : [4,5,6] }

shelf = shelve.open('shelf_file')
for key in d:
    shelf[key] = d[key]

shelf.close()

....

# reopen the shelf
shelf = shelve.open('shelf_file')
print(shelf) # => {'qwerty': [4, 5, 6], 'abc': [1, 2, 3]}
7
mhawke

Vous voudrez peut-être également jeter un coup d'œil à la base de données d'objets de Zope Le plus complexe que vous obtenez :-) Probablement surkill pour ce que vous avez, mais cela échoue bien et n'est pas trop difficile à utiliser.

5
Jay Atkinson

Si vous souhaitez l'enregistrer dans un format de type JSON facile à lire, utilisez repr pour sérialiser l'objet et eval pour le désérialiser.

repr(object) -> string

Renvoyer la représentation de chaîne canonique de l'objet. Pour la plupart des types d'objets, eval(repr(object)) == object.

3
John Kugelman

Juste pour ajouter aux suggestions précédentes, si vous souhaitez que le format de fichier soit facilement lisible et modifiable, vous pouvez également utiliser [~ # ~ # ~ # ~ ~] . Cela fonctionne extrêmement bien pour les dicts et les listes imbriqués, mais des échectes pour des structures de données plus complexes (c'est-à-dire des objets personnalisés) également, ainsi que son gros plus est que le format est lisible.

3
Eli Bendersky