HOWTO · Python
Dictionary in CSV schreiben in Python
Es wird demonstriert, wie man in Python ein Dictionary in eine csv-Datei schreibt
Auf dieser Seite
Verwenden Sie das standardmäßige Python-Modul csv, um ein Dictionary in eine CSV-Datei zu schreiben. Wählen Sie writer(), wenn jedes Schlüssel-Wert-Paar eine eigene Zeile belegen soll. Verwenden Sie DictWriter(), wenn mehrere Dictionaries gemeinsame Felder haben und als Datensätze unter einer Kopfzeile gespeichert werden sollen.
Ein Dictionary mit csv.writer als Schlüssel-Wert-Zeilen schreiben
Ein gewöhnlicher csv.writer schreibt Folgen von Werten. Durchlaufen Sie die Einträge eines Dictionarys und übergeben Sie jedes Schlüssel-Wert-Paar als Zeile. So entstehen zwei Spalten: eine für den Schlüssel und eine für den zugehörigen Wert.
Führen Sie dieses Beispiel aus. Der Code und die darin angezeigten Bezeichnungen bleiben unverändert auf Englisch:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import csv
import tempfile
from pathlib import Path
record = {"Name": "John", "Age": "23", "Country": "USA"}
with tempfile.TemporaryDirectory() as temp_dir:
path = Path(temp_dir) / "person.csv"
with path.open("w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
for key, value in record.items():
writer.writerow([key, value])
print(path.read_text(encoding="utf-8"), end="")
Name,John
Age,23
Country,USA
Die Zeilen haben die Form Name,John, Age,23 und Country,USA; dieses Format enthält keine Kopfzeile. Die angezeigten Bezeichnungen und Werte bleiben auf Englisch. Das Beispiel schreibt in eine temporäre Datei und gibt anschließend deren Inhalt aus. Beim Öffnen mit dem Modus w wird eine fehlende Datei angelegt und eine vorhandene sofort geleert. Verwenden Sie den Anhängemodus a, wenn frühere Zeilen erhalten bleiben sollen, und entscheiden Sie vor dem Anhängen, wie mit einer Kopfzeile umzugehen ist.
Mehrere Dictionaries mit csv.DictWriter als Datensätze schreiben
Bei einer Liste von Dictionaries mit gemeinsamen Schlüsseln ordnet DictWriter jedes Dictionary einem Datensatz zu. Legen Sie fieldnames in der gewünschten Spaltenreihenfolge fest, schreiben Sie die Kopfzeile einmal und anschließend jedes Dictionary als Zeile. Das Ergebnis besteht aus einer Kopfzeile und je einer Zeile pro Dictionary.
Der Code und die darin angezeigten Bezeichnungen bleiben unverändert auf Englisch:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import csv
import tempfile
from pathlib import Path
records = [
{"Name": "John", "Age": "23", "Country": "USA"},
{"Name": "Jose", "Age": "44", "Country": "Spain"},
]
fieldnames = ["Name", "Age", "Country"]
with tempfile.TemporaryDirectory() as temp_dir:
path = Path(temp_dir) / "people.csv"
with path.open("w", newline="", encoding="utf-8") as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(records)
print(path.read_text(encoding="utf-8"), end="")
Name,Age,Country
John,23,USA
Jose,44,Spain
Die Reihenfolge von fieldnames bestimmt sowohl den Text der Kopfzeile als auch die Spaltenreihenfolge – unabhängig davon, in welcher Reihenfolge die Schlüssel in den einzelnen Datensätzen eingefügt wurden. Jedes Dictionary sollte Werte für diese Felder enthalten. Standardmäßig löst DictWriter einen ValueError aus, wenn eine Zeile einen zusätzlichen Schlüssel enthält. Setzen Sie extrasaction="ignore" nur dann, wenn die zusätzlichen Daten absichtlich verworfen werden sollen. Fehlende Schlüssel werden mit restval ausgegeben, dessen Standardwert eine leere Zeichenfolge ist. Die Bezeichnungen und Daten in der Beispielausgabe bleiben auf Englisch.
Dateimodus wählen und Schreibfehler behandeln
Öffnen Sie CSV-Textdateien immer mit newline="", damit das CSV-Modul Zeilenenden konsistent verwalten kann. Der Modus w ersetzt den bisherigen Dateiinhalt; der Modus a fügt Zeilen am Ende hinzu und legt die Datei bei Bedarf an. Schreiben Sie im Anhängemodus die Kopfzeile nicht erneut, wenn die Datei bereits eine enthält.
Dateioperationen können einen OSError auslösen, etwa wenn ein Pfad nicht verfügbar ist oder der Zugriff verweigert wird. Fangen Sie diesen Fehler nur ab, wenn das Programm sinnvoll darauf reagieren kann, beispielsweise indem es den Pfad meldet und zur Auswahl eines anderen Speicherorts auffordert. Gehen Sie nicht davon aus, dass durch das Abfangen eines Fehlers ein teilweise erfolgter Schreibvorgang rückgängig gemacht wurde. Prüfen oder ersetzen Sie die Datei, wenn die Anwendung ein vollständig erfolgreiches Ergebnis benötigt.