248 votes

Comment enregistrer un dictionnaire dans un fichier ?

J'ai un problème avec la modification de la valeur d'un dict et l'enregistrement du dict dans un fichier texte (le format doit être le même). member_phone domaine.

Mon fichier texte a le format suivant :

memberID:member_name:member_email:member_phone

et je divise le fichier texte avec :

mdict={}
for line in file:
    x=line.split(':')
    a=x[0]
    b=x[1]
    c=x[2]
    d=x[3]
    e=b+':'+c+':'+d

    mdict[a]=e

Lorsque j'essaie de modifier le member_phone stocké dans d La valeur a changé sans que la clé ne soit utilisée,

def change(mdict,b,c,d,e):
    a=input('ID')
    if a in mdict:
        d= str(input('phone'))
        mdict[a]=b+':'+c+':'+d
    else:
        print('not')

et comment enregistrer le dict dans un fichier texte au même format ?

422voto

Zah Points 643

Python dispose de la cornichon module juste pour ce genre de choses.

Ces fonctions suffisent pour enregistrer et charger presque n'importe quel objet :

import pickle 

with open('saved_dictionary.pkl', 'wb') as f:
    pickle.dump(dictionary, f)

with open('saved_dictionary.pkl', 'rb') as f:
    loaded_dict = pickle.load(f)

Pour sauvegarder les collections de Python, il existe la fonction étagère module.

238voto

Franck Dernoncourt Points 4769

Pickle est probablement la meilleure option, mais au cas où quelqu'un se demanderait comment sauvegarder et charger un dictionnaire dans un fichier en utilisant NumPy :

import numpy as np

# Save
dictionary = {'hello':'world'}
np.save('my_file.npy', dictionary) 

# Load
read_dictionary = np.load('my_file.npy',allow_pickle='TRUE').item()
print(read_dictionary['hello']) # displays "world"

POUR INFORMATION : Visionneuse de fichiers NPY

86voto

simhumileco Points 5383

Nous pouvons également utiliser la fonction json module dans le cas où des dictionnaires ou d'autres données peuvent être facilement mis en correspondance avec des JSON format.

import json

# Serialize data into file:
json.dump( data, open( "file_name.json", 'w' ) )

# Read data from file:
data = json.load( open( "file_name.json" ) )

Cette solution présente de nombreux avantages , eg travaille pour Python 2.x y Python 3.x sous une forme inchangée et en outre, les données sauvegardées dans JSON peut être facilement transférable entre plusieurs plates-formes ou programmes différents . Ces données sont également lisible par l'homme .

28voto

Michael Dorner Points 730

Comme Pickle pose des problèmes de sécurité et est lent ( fuente ), j'opterais pour JSON, qui est rapide, intégré, lisible par l'homme et interchangeable :

import json
data = {'another_dict': {'a': 0, 'b': 1}, 'a_list': [0, 1, 2, 3]}
# e.g. file = './data.json' 
with open(file, 'w') as f: 
    json.dump(data, f)

La lecture est tout aussi facile :

with open(file, 'r') as f:
    data = json.load(f)

Ceci est similaire à cette réponse mais met en œuvre correctement la gestion des fichiers.

Si l'amélioration des performances n'est toujours pas suffisante, je recommande vivement orjson une bibliothèque JSON rapide et correcte pour Python construite sur Rust.

Pour ceux qui recherchent un stockage efficace

import json 
import bz2

byte_data = json.dumps(data)
compressed_byte_data = bz2.compress(byte_data)
with open(file_path, 'wb') as file_handle:
    file_handle.write(compressed_byte_data)

24voto

junglejet Points 257

Sauvegarde et chargement des dictées dans un fichier :

def save_dict_to_file(dic):
    f = open('dict.txt','w')
    f.write(str(dic))
    f.close()

def load_dict_from_file():
    f = open('dict.txt','r')
    data=f.read()
    f.close()
    return eval(data)

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