Python-csv-Modul
CSV-Dateien (Comma-Separated Values) sind ein gängiges Dateiformat, das zum Speichern tabellarischer Daten verwendet wird.
CSV-Dateien bestehen aus reinem Text, wobei jede Zeile eine Datenzeile in der Tabelle darstellt und jede Spalte durch Kommas (oder andere Trennzeichen) getrennt ist.
CSV-Dateien werden häufig für den Datenaustausch verwendet, weil sie einfach und leicht zu verarbeiten sind.
Python bietet ein integriertescsvModul zum Lesen und Schreiben von CSV-Dateien. Dieses Modul vereinfacht den Umgang mit CSV-Dateien und ermöglicht Entwicklern, tabellarische Daten einfach zu bearbeiten.
1. CSV-Dateien lesen
Um CSV-Dateien zu lesen, können Sie dascsv.reader-Objekt verwenden. Hier ist ein einfaches Beispiel:
Beispiel
# CSV-Datei öffnen
with open('data.csv', mode='r', encoding='utf-8') as file:
# Ein csv.reader-Objekt erstellen
csv_reader = csv.reader(file)
# Daten Zeile für Zeile lesen
for row in csv_reader:
print(row)
Code-Erklärung:
open('data.csv', mode='r', encoding='utf-8'): Öffnen Sie im schreibgeschützten Modus die Datei namensdata.csvund geben Sie die Kodierung als UTF-8 an.csv.reader(file): Erstellen Sie eincsv.reader-Objekt, um den Dateiinhalt zu lesen.for row in csv_reader: Liest den Dateiinhalt Zeile für Zeile, und jede Datenzeile wird in eine Liste geparst.
2. CSV-Dateien schreiben
Um in CSV-Dateien zu schreiben, können Sie dascsv.writerObjekt verwenden. Hier ist ein Beispiel:
Beispiel
# Zu schreibende Daten
data = [
['Name', 'Age', 'City'],
['Alice', '30', 'New York'],
['Bob', '25', 'Los Angeles']
]
# CSV-Datei öffnen
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
# Ein csv.writer-Objekt erstellen
csv_writer = csv.writer(file)
# Daten schreiben
for row in data:
csv_writer.writerow(row)
Code-Erklärung:
open('output.csv', mode='w', encoding='utf-8', newline=''): Im Schreibmodus die Datei mit dem Namen öffnenoutput.csvund geben Sie die Kodierung als UTF-8 an.newline=''Wird verwendet, um Leerzeilen in Windows-Systemen zu vermeiden.csv.writer(file): Erstellen Sie eincsv.writerObjekt zum Schreiben des Dateiinhalts.csv_writer.writerow(row): Schreibt jede Datenzeile in die Datei.
3. Lesen und Schreiben von CSV-Dateien mithilfe von Wörterbüchern
csvDas Modul bietet außerdem dieDictReaderundDictWriterKlassen, die jede Zeile einer CSV-Datei in ein Wörterbuch parsen oder Wörterbücher in eine CSV-Datei schreiben können.
VerwendungDictReaderzum Lesen von CSV-Dateien:
Beispiel
with open('data.csv', mode='r', encoding='utf-8') as file:
csv_dict_reader = csv.DictReader(file)
for row in csv_dict_reader:
print(row)
VerwendungDictWriterzum Schreiben von CSV-Dateien:
Beispiel
data = [
{'Name': 'Alice', 'Age': '30', 'City': 'New York'},
{'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
fieldnames = ['Name', 'Age', 'City']
csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
# Kopfzeile schreiben
csv_dict_writer.writeheader()
# Daten schreiben
for row in data:
csv_dict_writer.writerow(row)
Häufige Attribute und Methoden
Kernmethoden des csv-Moduls
| Methode | Beschreibung | Beispiel |
|---|---|---|
csv.reader() | CSV-Daten aus einem Dateiobjekt lesen | reader = csv.reader(file) |
csv.writer() | Daten in eine CSV-Datei schreiben | writer = csv.writer(file) |
csv.DictReader() | CSV-Zeilen als Dictionaries lesen (mit Kopfzeile) | dict_reader = csv.DictReader(file) |
csv.DictWriter() | Dictionaries in eine CSV-Datei schreiben (Feldnamen erforderlich) | dict_writer = csv.DictWriter(file, fieldnames) |
csv.register_dialect() | Ein benutzerdefiniertes CSV-Format registrieren (z. B. Trennzeichen) | csv.register_dialect('mydialect', delimiter='|') |
csv.unregister_dialect() | Einen registrierten Dialekt löschen | csv.unregister_dialect('mydialect') |
csv.list_dialects() | Alle registrierten Dialekte auflisten | print(csv.list_dialects()) |
Häufige Methoden von csv.reader- und csv.writer-Objekten
| Methode | Beschreibung | Anwendbares Objekt |
|---|---|---|
__next__() | Iterativ die nächste Zeile lesen (oder verwenden Sie eineforSchleife) | reader |
writerow(row) | Eine einzelne Datenzeile schreiben | writer |
writerows(rows) | Mehrere Datenzeilen schreiben (eine Liste von Listen) | writer |
Eigenschaften von csv.DictReader- und csv.DictWriter-Objekten
| Merkmal/Methode | Beschreibung | Beispiel |
|---|---|---|
fieldnames | Feldnamenliste (DictReaderautomatisch aus der ersten Zeile ermittelt) | dict_reader.fieldnames |
writeheader() | Kopfzeile schreiben (DictWriterausschließlich) | dict_writer.writeheader() |
Allgemeine Parameterbeschreibungen
| Parameter | Beschreibung | Beispielwert | Anwendbare Methode |
|---|---|---|---|
delimiter | Feldtrennzeichen | ','(Standard)'\t' | reader/writer |
quotechar | Anführungszeichen (umschließt spezielle Felder) | '"'(Standard) | reader/writer |
quoting | Quoting-Regel | csv.QUOTE_ALL(alle in Anführungszeichen setzen) | reader/writer |
skipinitialspace | Leerzeichen nach dem Trennzeichen ignorieren | True/False | reader |
lineterminator | Zeilenende | '\r\n'(Standard) | writer |
dialect | Vordefinierter Dialektname | 'excel'(Standard) | Alle Methoden |
Beispiel
1. CSV-Dateien lesen
Beispiel
with open('data.csv', 'r') as Datei:
reader = csv.reader(file, delimiter=',')
for row in reader:
print(row) # Jede Zeile ist eine Liste
2. CSV-Dateien schreiben
Beispiel
with open('output.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(data) # Mehrere Zeilen schreiben
3. Verwenden von DictReader und DictWriter (mit Kopfzeile)
Beispiel
with open('data.csv', 'r') as Datei:
dict_reader = csv.DictReader(file)
for row in dict_reader:
print(row['Name'], row['Age']) # Zugriff über Feldnamen
# Schreiben
fieldnames = ['Name', 'Age']
with open('output.csv', 'w', newline='') as file:
dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
dict_writer.writeheader() # Kopfzeile schreiben
dict_writer.writerow({'Name': 'Alice', 'Age': 25})
4. Benutzerdefinierte Dialekte (z. B. Umgang mit TSV-Dateien)
Beispiel
with open('data.tsv', 'r') as Datei:
reader = csv.reader(file, dialect='tsv')
for row in reader:
print(row)