web-dev-qa-db-fra.com

Comment puis-je enregistrer une liste de dictionnaires dans un fichier?

J'ai une liste de dictionnaires. Parfois, je souhaite modifier et enregistrer l'un de ces dictionnaires afin que le nouveau message soit utilisé si le script est redémarré. En ce moment, je fais ce changement en modifiant le script et en le réexécutant. Je voudrais retirer cela du script et mettre la liste des dictionnaires dans un fichier de configuration d'une certaine sorte.

J'ai trouvé des réponses sur la façon d'écrire une liste dans un fichier , mais cela suppose qu'il s'agit d'une liste plate. Comment puis-je le faire avec une liste de dictionnaires?

Ma liste ressemble à ceci:

logic_steps = [
    {
        'pattern': "asdfghjkl",
        'message': "This is not possible"
    },
    {
        'pattern': "anotherpatterntomatch",
        'message': "The parameter provided application is invalid"
    },
    {
        'pattern': "athirdpatterntomatch",
        'message': "Expected value for debugging"
    },
]
16
Python Novice

à condition que l'objet ne contienne que des objets que JSON peut gérer (lists, tuples, strings, dicts, numbers, None, True et False), vous pouvez le vider comme json.dump :

import json
with open('outputfile', 'w') as fout:
    json.dump(your_list_of_dict, fout)
34
mgilson

si vous voulez que chaque dictionnaire soit sur une seule ligne:

 import json
 output_file = open(dest_file, 'w', encoding='utf-8')
 for dic in dic_list:
    json.dump(dic, output_file) 
    output_file.write("\n")
5
Reihan_amn

Juste pour être complet, j'ajoute également la méthode json.dumps():

with open('outputfile_2', 'w') as file:
    file.write(json.dumps(logic_steps, indent=4))

Jetez un œil ici pour la différence entre json.dump() et json.dumps()

4
Nikos Tavoularis

La façon dont vous devrez suivre pour écrire un dict dans un fichier est un peu différente de celle que vous avez mentionnée.

Tout d'abord, vous devez sérialiser l'objet et ensuite vous le persistez. Ce sont des noms fantaisistes pour "écrire des objets python dans un fichier").

Python dispose de 3 modules de sérialisation inclus par défaut que vous pouvez utiliser pour atteindre votre objectif. Ils sont: cornichons, étagères et json. Chacun a ses propres caractéristiques et celui que vous devez utiliser est celui qui convient le mieux à votre projet. Vous devriez vérifier la documentation de chaque module pour en savoir plus.

Si vos données ne seront accessibles que par python, vous pouvez utiliser shelve, voici un exemple:

import shelve

my_dict = {"foo":"bar"}

# file to be used
shelf = shelve.open("filename.shlf")

# serializing
shelf["my_dict"] = my_dict

shelf.close() # you must close the shelve file!!!

Pour récupérer les données que vous pouvez faire:

import shelve

shelf = shelve.open("filename.shlf") # the same filename that you used before, please
my_dict = shelf["my_dict"]
shelf.close()

Assurez-vous que vous pouvez traiter l'objet étagère presque de la même manière que vous le faites avec un dict.

2
ppalacios