HOWTO · Python

Enregistrer un dictionnaire dans un fichier en Python

Ce tutoriel montre comment enregistrer un dictionnaire dans un fichier en Python

Sur cette page

Pour enregistrer un dictionnaire Python et le relire plus tard, choisissez le format selon l’usage des données : utilisez JSON pour des valeurs compatibles avec JSON lorsque vous avez besoin d’un fichier portable et lisible par un humain ; utilisez pickle pour des objets Python si le fichier provient uniquement d’une source fiable ; ou choisissez le format .npy de NumPy si votre flux de travail utilise déjà NumPy. Chaque exemple ci-dessous écrit un fichier, puis relit le dictionnaire.

Enregistrer un dictionnaire dans un fichier en Python avec la fonction dump du module pickle

Le module pickle stocke les objets Python dans un format binaire propre à Python. L’exemple suivant écrit un dictionnaire avec pickle.dump() et le lit avec pickle.load(). Utilisez wb pour écrire des octets et rb pour les lire ; le répertoire temporaire rend l’exemple autonome.

import pickle
from pathlib import Path
from tempfile import TemporaryDirectory

my_dict = {"Apple": 4, "Banana": 2, "Orange": 6, "Grapes": 11}

with TemporaryDirectory() as directory:
    file_path = Path(directory) / "myDictionary.pkl"
    with file_path.open("wb") as file:
        pickle.dump(my_dict, file)

    with file_path.open("rb") as file:
        new_dict = pickle.load(file)

    print(new_dict)
{'Apple': 4, 'Banana': 2, 'Orange': 6, 'Grapes': 11}

Ne chargez des fichiers pickle que s’ils proviennent de sources fiables : la désérialisation peut exécuter du code. Pickle est utile lorsque la sérialisation propre à Python convient, mais ce n’est pas un format d’échange portable.

Enregistrer un dictionnaire dans un fichier en Python avec la fonction save de la bibliothèque NumPy

Si votre projet utilise déjà NumPy, np.save() peut stocker un dictionnaire dans un tableau d’objets .npy. Pour charger ces données objet, il faut définir allow_pickle=True ; appelez .item() sur le tableau chargé à zéro dimension pour récupérer le dictionnaire. Cela comporte également le risque lié à la confiance dans les données pickle chargées. NumPy doit être installé.

import numpy as np
from pathlib import Path
from tempfile import TemporaryDirectory

my_dict = {"Apple": 4, "Banana": 2, "Orange": 6, "Grapes": 11}

with TemporaryDirectory() as directory:
    file_path = Path(directory) / "dictionary.npy"
    np.save(file_path, my_dict)
    new_dict = np.load(file_path, allow_pickle=True).item()
    print(new_dict)
{'Apple': 4, 'Banana': 2, 'Orange': 6, 'Grapes': 11}

Enregistrer un dictionnaire dans un fichier en Python avec la fonction dump du module json

Pour obtenir un fichier lisible et échangeable avec d’autres langages, utilisez le module intégré json de Python lorsque le dictionnaire contient des valeurs compatibles avec JSON. json.dump() écrit dans un fichier texte et json.load() le relit. Un gestionnaire de contexte ferme chaque fichier, même si une opération échoue. JSON ne préserve ni les objets Python arbitraires ni tous les types Python ; par exemple, les classes personnalisées nécessitent une stratégie de conversion explicite.

import json
from pathlib import Path
from tempfile import TemporaryDirectory

my_dict = {"Apple": 4, "Banana": 2, "Orange": 6, "Grapes": 11}

with TemporaryDirectory() as directory:
    file_path = Path(directory) / "myDictionary.json"
    with file_path.open("w", encoding="utf-8") as file:
        json.dump(my_dict, file)

    with file_path.open("r", encoding="utf-8") as file:
        new_dict = json.load(file)

    print(new_dict)
{'Apple': 4, 'Banana': 2, 'Orange': 6, 'Grapes': 11}