HOWTO · Python

Schreiben Sie ein Array in eine CSV-Datei in Python

Dieses Tutorial zeigt, wie Sie das Array in einer CSV-Datei in Python speichern

Auf dieser Seite

CSV (Comma-Separated Values) speichert tabellarische Daten als Textzeilen und eignet sich daher, um verarbeitete Arrays mit Tabellenkalkulationen und anderen Programmen auszutauschen. Verwenden Sie NumPy für arrayförmige Daten, Pandas, wenn Sie bereits mit einem DataFrame arbeiten, und Pythons csv-Modul für allgemeine Zeilen und zuverlässiges Quoting. Die folgenden Beispiele verwenden Kommas als Trennzeichen und zeigen, wie sich die erzeugten Zeilen wieder einlesen lassen.

Ein NumPy-Array mit numpy.savetxt() in eine CSV-Datei schreiben

Mit numpy.savetxt() schreiben Sie ein- oder zweidimensionale Arrays in eine Textdatei. Übergeben Sie delimiter=",", um Spalten durch Kommas zu trennen. Das Standardtrennzeichen ist ein Leerzeichen und erzeugt daher keine kommagetrennten Spalten. Für ein eindimensionales numerisches Array eignet sich np.savetxt("numbers.csv", data, delimiter=",", fmt="%d"), wenn Ganzzahltext genügt. Für Dezimalwerte wählen Sie ein Format wie "%.2f", um die angezeigte Genauigkeit festzulegen.

Für tabellarische Daten mit Text und Zahlen erstellen Sie ein zweidimensionales Array, etwa np.array([["Name", "Age"], ["Ada", 36]]), und übergeben fmt="%s". NumPy-Arrays haben einen einheitlichen Elementtyp. Werden Text und Zahlen kombiniert, entstehen daher Zeichenketten; das Format schreibt diese Werte als Text. CSV bewahrt Python- oder NumPy-Datentypen nicht. Ein Programm, das die Datei einliest, muss Werte wie 36 selbst interpretieren, wenn es eine Ganzzahl benötigt.

NumPy schreibt jede Array-Zeile als CSV-Zeile. Spaltennamen werden nur hinzugefügt, wenn Sie header angeben; standardmäßig wird einem solchen Header ein Kommentarzeichen vorangestellt. Für eine normale erste Zeile mit Spaltennamen setzen Sie header="Name,Age" und comments="".

Ein Array mit Pandas DataFrame.to_csv() in eine CSV-Datei schreiben

Wandeln Sie arrayähnliche Daten in einen Pandas-DataFrame um, wenn Sie beschriftete Spalten benötigen oder bereits Pandas verwenden. Mit df = pd.DataFrame(data, columns=["Name", "Age"]) erhalten die Werte beispielsweise Spaltennamen; df.to_csv("people.csv", index=False) schreibt sie in eine Datei. Die Option index=False verhindert, dass Pandas Zeilenbezeichnungen als zusätzliche erste Spalte hinzufügt. Lassen Sie die Option nur weg, wenn diese Bezeichnungen in die Datei gehören. Setzen Sie header=False, wenn die Zieldatei keine Spaltennamen enthalten soll. Weitere Exportoptionen finden Sie in der Referenz zu DataFrame.to_csv().

Zeilen mit Pythons csv.writer() in eine CSV-Datei schreiben

Pythons csv.writer() aus der Standardbibliothek eignet sich gut für Zeilen mit Text, Zahlen, Kommas oder Anführungszeichen. Öffnen Sie die Datei mit newline="", erstellen Sie einen Writer und übergeben Sie ihm Zeilen mit writerows(). Enthält ein Wert ein Komma oder Anführungszeichen, übernimmt der Writer das erforderliche CSV-Quoting. Dieses Beispiel benötigt nur die Standardbibliothek und gibt den gespeicherten Dateiinhalt aus, sodass Zeilen- und Trennzeichenverhalten sichtbar werden:

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import csv
from pathlib import Path
from tempfile import TemporaryDirectory

rows = [[1, 4, 2], [7, 9, 4], [0, 6, 2]]
with TemporaryDirectory() as directory:
    path = Path(directory) / "numbers.csv"
    with path.open("w", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        writer.writerows(rows)
    print(path.read_text(encoding="utf-8"), end="")
1,4,2
7,9,4
0,6,2

Bei großen Eingaben akzeptiert writerows() ein Iterable von Zeilen. Der gesamte Datensatz muss daher nicht erst in einer weiteren Liste zusammengestellt werden. Die Datei wird geschlossen, sobald der with-Block endet.

Eine CSV-Datei mit csv.reader() wieder einlesen

csv.reader() liest die Datei ein und liefert jede Zeile als Liste von Zeichenketten. Es handelt sich um einen Reader, nicht um ein Writer-Objekt. Eine als 36 geschriebene Zelle wird beispielsweise als Zeichenkette "36" eingelesen. Wenn Sie damit rechnen möchten, wandeln Sie den Wert mit int() oder float() um. Öffnen Sie Textdateien zum CSV-Einlesen ebenfalls mit newline="". Hat die Datei einen Header, behandeln Sie die erste Zeile separat, indem Sie zum Beispiel vor der Verarbeitung der Datenzeilen next(reader) aufrufen. Der Reader verarbeitet außerdem Trennzeichen innerhalb von Anführungszeichen korrekt, anders als das Aufteilen jeder Zeile an Kommas.

Einfache Zeilen mit der Python-Dateiverarbeitung schreiben

Die direkte Dateiverarbeitung reicht für einfache, kontrollierte Werte aus, die keine Kommas, Anführungszeichen oder Zeilenumbrüche enthalten können. Wandeln Sie jeden Wert in Text um, verbinden Sie die Werte einer Zeile mit Kommas und beenden Sie die Zeile mit einem Zeilenumbruch, zum Beispiel mit file.write(",".join(map(str, row)) + "\n"). Das ist manuelle Textformatierung und kein allgemeiner CSV-Serializer: Ein Name wie "Doe, Jane" würde in zwei Spalten aufgeteilt. Verwenden Sie csv.writer() für beliebige Daten, damit Quoting und Trennzeichen korrekt behandelt werden. Öffnen Sie eine Datei für die CSV-Ausgabe mit newline="" und wählen Sie eine explizite Kodierung wie UTF-8, wenn die Datei Nicht-ASCII-Zeichen enthalten soll.