HOWTO · Python

Speichern eines Dictionaries in einer Datei in Python

Dieses Tutorial demonstriert, wie man in Python ein Dictionary in einer Datei speichert

Auf dieser Seite

Um ein Python-Dictionary zu speichern und später wieder einzulesen, wählen Sie das Format passend zur Verwendung der Daten: JSON eignet sich für JSON-kompatible Werte, wenn Sie eine portable, menschenlesbare Datei benötigen. Verwenden Sie pickle für Python-Objekte, wenn die Datei ausschließlich aus einer vertrauenswürdigen Quelle geladen wird, oder das .npy-Format von NumPy, wenn Ihr Arbeitsablauf ohnehin auf NumPy basiert. Jedes der folgenden Beispiele schreibt eine Datei und liest das Dictionary wieder ein.

Ein Dictionary in Python mit der Funktion dump des Moduls pickle in einer Datei speichern

Das Modul pickle speichert Python-Objekte in einem binären, Python-spezifischen Format. Das folgende Beispiel schreibt ein Dictionary mit pickle.dump() und liest es mit pickle.load() wieder ein. Verwenden Sie wb, um Bytes zu schreiben, und rb, um sie zu lesen. Das temporäre Verzeichnis hält das Beispiel in sich geschlossen.

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}

Laden Sie pickle-Dateien ausschließlich aus vertrauenswürdigen Quellen: Beim Deserialisieren mit pickle kann Code ausgeführt werden. pickle ist nützlich, wenn eine Python-spezifische Serialisierung akzeptabel ist, eignet sich aber nicht als portables Austauschformat.

Ein Dictionary in Python mit der Funktion save der Bibliothek NumPy in einer Datei speichern

Wenn Ihr Projekt bereits NumPy verwendet, kann np.save() ein Dictionary in einem .npy-Objektarray speichern. Zum Laden dieser Objektdaten ist allow_pickle=True erforderlich. Rufen Sie .item() für das geladene null-dimensionale Array auf, um das Dictionary zurückzuerhalten. Auch dabei besteht das Vertrauensrisiko, das mit dem Laden von pickle-Daten verbunden ist. NumPy muss installiert sein.

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}

Ein Dictionary in Python mit der Funktion dump des Moduls json in einer Datei speichern

Für eine lesbare Datei, die sich mit anderen Sprachen austauschen lässt, verwenden Sie Pythons integriertes Modul json, sofern das Dictionary JSON-kompatible Werte enthält. json.dump() schreibt in eine Textdatei und json.load() liest sie wieder ein. Ein Kontextmanager schließt jede Datei auch dann, wenn ein Vorgang fehlschlägt. JSON bewahrt keine beliebigen Python-Objekte und auch nicht jeden Python-Typ. Für eigene Klassen ist beispielsweise eine ausdrückliche Umwandlungsstrategie erforderlich.

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}