Python CSV Modul

Das csv-Modul bietet Werkzeuge zum Lesen und Schreiben von CSV-Dateien, die üblicherweise für den Datenaustausch verwendet werden.

csv Modul vs. Manuelles Lesen/Schreiben von Dateien

Obwohl Sie CSV-Dateien mit grundlegenden Dateioperationen und String-Methoden lesen und schreiben können (wie open() mit read oder write und split()), ist das csv-Modul dafür konzipiert, Randfälle wie Anführungszeichen in Feldern, eingebettete Trennzeichen und unterschiedliche Zeilenenden zu behandeln. Es gewährleistet die Kompatibilität mit CSV-Dateien, die von anderen Programmen (wie Excel) generiert wurden, und reduziert das Risiko von Parsing-Fehlern. Für die meisten CSV-Aufgaben sollten Sie das csv-Modul gegenüber manuellem Parsing bevorzugen.
Weitere Informationen zu den Grundlagen der Dateibehandlung finden Sie auf der Seite Datei- und Verzeichnispfade.

Um zu beginnen, importieren Sie das Modul:

import csv

csv.reader()

Diese Funktion empfängt eine Datei, die ein Iterable von Strings sein muss. Mit anderen Worten, es sollte die geöffnete Datei sein, wie folgt:

import csv

file_path = 'file.csv'

# CSV-Datei lesen
with open(file_path, 'r', newline='') as csvfile:
  reader = csv.reader(csvfile)

  # Über jede Zeile iterieren
  for line in reader:
    print(line)

Diese Funktion gibt ein Reader-Objekt zurück, über das leicht iteriert werden kann, um jede Zeile zu erhalten. Auf jede Spalte in den entsprechenden Zeilen kann über den Index zugegriffen werden, ohne die eingebaute Funktion split() verwenden zu müssen.

csv.writer()

Diese Funktion empfängt die Datei, in die geschrieben werden soll, als CSV-Datei. Ähnlich wie bei der Reader-Funktion sollte sie wie folgt aufgerufen werden:

import csv

file_path = 'file.csv'

# Datei zum Schreiben von CSV öffnen
with open(file_path, 'w', newline='') as csvfile:
  writer = csv.writer(csvfile)

  # etwas tun

Der Block “etwas tun” kann durch die Verwendung der folgenden Funktionen ersetzt werden:

writer.writerow()

Schreibt eine einzelne Zeile in die CSV-Datei.

# Kopfzeile schreiben
writer.writerow(['name', 'age', 'city'])
# Datenzeile schreiben
writer.writerow(['Alice', 30, 'London'])

writer.writerows()

Schreibt mehrere Zeilen auf einmal.

# Mehrere Zeilen vorbereiten
rows = [
    ['name', 'age', 'city'],
    ['Bob', 25, 'Paris'],
    ['Carol', 28, 'Berlin']
]
# Alle Zeilen auf einmal schreiben
writer.writerows(rows)

csv.DictReader

Ermöglicht das Lesen von CSV-Dateien und den Zugriff auf jede Zeile als Wörterbuch, wobei standardmäßig die erste Zeile der Datei als Schlüssel (Spaltenüberschriften) verwendet wird.

import csv

# CSV als Wörterbuch lesen (erste Zeile wird zu Schlüsseln)
with open('people.csv', 'r', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    # Auf Spalten nach Namen statt nach Index zugreifen
    for row in reader:
        print(row['name'], row['age'])
  • Jede row ist ein OrderedDict (oder ein reguläres dict in Python 3.8+).

  • Wenn Ihre CSV-Datei keine Kopfzeilen hat, können Sie diese mit dem Parameter fieldnames angeben:

    reader = csv.DictReader(csvfile, fieldnames=['name', 'age', 'city'])
    

csv.DictWriter

Ermöglicht das Schreiben von Wörterbüchern als Zeilen in eine CSV-Datei. Sie müssen die Feldnamen (Spaltenüberschriften) beim Erstellen des Writers angeben.

import csv

fieldnames = ['name', 'age', 'city']
rows = [
    {'name': 'Alice', 'age': 30, 'city': 'London'},
    {'name': 'Bob', 'age': 25, 'city': 'Paris'}
]

# Wörterbücher in CSV schreiben
with open('people_dict.csv', 'w', newline='') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()  # schreibt die Kopfzeile
    writer.writerows(rows)
  • Verwenden Sie writer.writeheader(), um die Spaltenüberschriften als erste Zeile zu schreiben.
  • Jedes Wörterbuch in writer.writerows() muss Schlüssel haben, die den beim Erstellen des Writers angegebenen fieldnames entsprechen.

Zusätzliche Parameter für csv.reader() und csv.writer()

delimiter

Sollte das Zeichen sein, das zur Trennung der Felder verwendet wird. Wie der Dateityp besagt, ist der Standardwert das Komma ‘,’. Abhängig von der lokalen Einstellung kann Excel CSV-Dateien mit dem Semikolon als Trennzeichen generieren.

import csv

# CSV mit Semikolon als Trennzeichen lesen
with open('data_semicolon.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader:
        print(row)

lineterminator

Zeichen oder Zeichenfolge, die eine Zeile beendet. Am häufigsten ist “\r\n”, es kann aber auch “\n” sein.

quotechar

Zeichen, das verwendet wird, um Felder zu kennzeichnen, die Sonderzeichen enthalten (Standard ist ").

# Einfaches Anführungszeichen als Kennzeichnungszeichen verwenden
reader = csv.reader(csvfile, quotechar="'")

Weitere Details finden Sie in der offiziellen Python csv Moduldokumentation.