J'écris un programme qui stocke des données dans un objet dictionnaire, mais ces données doivent être enregistrées à un moment donné pendant l'exécution du programme et rechargées dans l'objet dictionnaire lorsque le programme est exécuté à nouveau. Comment convertir un objet dictionnaire en une chaîne qui peut être écrite dans un fichier et rechargée dans un objet dictionnaire? Nous espérons que cela supportera les dictionnaires contenant des dictionnaires.
python
json
dictionary
serialization
AJ00200
la source
la source
import json
que j'ai fait!Si votre dictionnaire n'est pas trop gros, str + eval peut faire le travail:
Vous pouvez utiliser ast.literal_eval au lieu de eval pour plus de sécurité si la source n'est pas fiable.
la source
J'utilise
json
:la source
Utilisez le
pickle
module pour l'enregistrer sur le disque et le charger plus tard.la source
Pourquoi ne pas utiliser la fonction literal_eval de la bibliothèque ast intégrée de Python 3 . Il vaut mieux utiliser literal_eval au lieu de eval
donnera la sortie en tant que véritable dictionnaire
Et si vous demandez à convertir un dictionnaire en chaîne , que diriez-vous d'utiliser str () méthode de Python.
Supposons que le dictionnaire soit:
Et cela se fera comme ceci:
Imprime:
C'est aussi simple que vous le souhaitez.
la source
Si dans Chinses
la source
Convertir le dictionnaire en JSON (chaîne)
vous obtiendrez:
Convertir une chaîne en dictionnaire
la source
Je pense que vous devriez envisager d'utiliser le
shelve
module qui fournit des objets persistants de type dictionnaire sauvegardés sur fichier. Il est facile à utiliser à la place d'un "vrai" dictionnaire car il fournit de manière presque transparente à votre programme quelque chose qui peut être utilisé comme un dictionnaire, sans avoir besoin de le convertir explicitement en chaîne, puis d'écrire dans un fichier (ou vice- vice versa).La principale différence est de devoir d'abord le
open()
faire avant la première utilisation, puis de leclose()
faire lorsque vous avez terminé (et éventuellement desync()
le faire, selon lewriteback
option utilisée). Tout objet fichier "étagère" créé peut contenir des dictionnaires normaux en tant que valeurs, ce qui leur permet d'être imbriqués logiquement.Voici un exemple trivial:
Production:
la source
Si vous vous souciez de la vitesse, utilisez ujson (UltraJSON), qui a la même API que json:
la source
J'utilise yaml si cela doit être lisible (ni JSON ni XML ne sont à mon humble avis), ou si la lecture n'est pas nécessaire, j'utilise cornichon.
Écrire
Relire
la source
b
drapeau lors de l'ouverture du fichier ici.dumps()
défaut, le protocole 0, qui est un protocole ascii. C'est pourquoi'rb'
n'est pas nécessaire à mon humble avis.