Beispieldatei verkaeufe.csv (Trenner Semikolon, wie ihn deutsche Excel-Versionen erzeugen):
csv
kunde;artikel;menge;preis
Anna;Stift;10;1.50
Ben;Heft;5;3.00
Anna;Heft;2;3.00
Cem;Stift;20;1.40
Lesen mit DictReader (jede Zeile wird ein Dictionary, die Spaltenüberschriften sind die Schlüssel):
python
import csv
with open('verkaeufe.csv', newline='', encoding='utf-8-sig') as f:
leser = csv.DictReader(f, delimiter=';')
zeilen = list(leser) # Liste von Dictionaries, alle Werte sind Strings
print(zeilen[0]) # {'kunde': 'Anna', 'artikel': 'Stift', 'menge': '10', 'preis': '1.50'}
summe = sum(int(z['menge']) * float(z['preis']) for z in zeilen)
Schreiben mit DictWriter:
python
import csv
felder = ['kunde', 'umsatz']
with open('umsatz.csv', 'w', newline='', encoding='utf-8-sig') as f:
schreiber = csv.DictWriter(f, fieldnames=felder, delimiter=';')
schreiber.writeheader() # Kopfzeile schreiben
schreiber.writerow({'kunde': 'Anna', 'umsatz': 15.0})
schreiber.writerows([{'kunde': 'Ben', 'umsatz': 15.0}]) # mehrere auf einmal
| Funktion und Parameter | Bedeutung |
|---|---|
csv.DictReader(f, fieldnames=None, delimiter=',') |
Liest Zeilen als Dictionaries. Ohne fieldnames gilt die erste Zeile als Kopfzeile |
csv.DictWriter(f, fieldnames, delimiter=',') |
Schreibt Dictionaries. fieldnames legt Spalten und Reihenfolge fest |
csv.reader(f, delimiter=','), csv.writer(f) |
Einfachere Variante mit Listen statt Dictionaries |
open(..., newline='') |
Pflicht bei CSV-Dateien, sonst gibt es unter Windows leere Zeilen |
encoding='utf-8-sig' |
UTF-8 mit Markierung (BOM). Excel erkennt Umlaute dann richtig. Beim Lesen entfernt es die Markierung am Dateianfang |
delimiter |
Trennzeichen: ',', ';' oder '\t' |
Alle Werte aus CSV sind Strings. Du musst selbst mit int(...), float(...) oder datetime.strptime(...) umwandeln. Deutsche Zahlen mit Komma wandelst du mit float(text.replace(',', '.')) um.