J'écris un programme qui stocke des données dans un objet dictionnaire, mais ces données doivent être sauvegardées à un moment donné au cours de l'exécution du programme et chargées dans l'objet dictionnaire lorsque le programme est exécuté à nouveau. Comment convertir un objet de dictionnaire en une chaîne pouvant être écrite dans un fichier et chargée dans un objet de dictionnaire? J'espère que cela supportera les dictionnaires contenant des dictionnaires.
Réponses
Trop de publicités?Si votre dictionnaire n'est pas trop volumineux, str + eval peut peut-être faire le travail:
dict1 = {'one':1, 'two':2, 'three': {'three.1': 3.1, 'three.2': 3.2 }}
str1 = str(dict1)
dict2 = eval(str1)
print dict1==dict2
Vous pouvez utiliser ast.literal_eval au lieu de eval pour une sécurité supplémentaire si la source n'est pas sécurisée.
Je pense que vous devriez envisager d'utiliser l' shelve
module qui fournit persistante sauvegardés dans des fichiers de type dictionnaire d'objets. Il est facile à utiliser à la place d'un "vrai" dictionnaire parce qu'il est presque transparente fournit à votre programme avec quelque chose qui peut être utilisé comme un dictionnaire, sans la nécessité de convertir explicitement à une chaîne et puis les écrire dans un fichier (ou vice-versa).
La principale différence est besoin d'abord d' open()
avant la première utilisation et ensuite, close()
lorsque vous avez terminé (et, éventuellement, sync()
ing, selon la writeback
option). Tout de "plateau" des objets de fichiers à créer régulières peuvent contenir des dictionnaires en tant que valeurs, leur permettant d'être logiquement imbriqués.
Voici un exemple trivial:
import shelve
shelf = shelve.open('mydata') # open for reading and writing, creating if nec
shelf.update({'one':1, 'two':2, 'three': {'three.1': 3.1, 'three.2': 3.2 }})
shelf.close()
shelf = shelve.open('mydata')
print shelf
shelf.close()
Sortie:
{'three': {'three.1': 3.1, 'three.2': 3.2}, 'two': 2, 'one': 1}