335 votes

Convertir un dict en python en chaîne et vice versa

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.

347voto

Tyler Eaves Points 5758

json module est une bonne solution ici, et présente l’avantage par rapport à pickle de ne produire que du texte brut, et est multi-plateforme et multi-version.

231voto

PabloG Points 9308

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.

179voto

Eyal Ch Points 186

j'utilise json:

 import json
 
  • convertir en chaîne:

    input = json.dumps ({'id': id})

  • charge à dicter:

    mon_dict = json.loads (entrée)

14voto

ismail Points 19146

Utilisez le module pickle pour l’enregistrer sur le disque et le charger plus tard.

3voto

martineau Points 21665

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}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X