Voraussetzungen
Du kennst die Inhalte aus Teil 15 und arbeitest mit einem lokalen Python-3-Interpreter (ab Python 3.10), beispielsweise in Thonny.
Das lernst du in dieser Lektion
- DictWriter und DictReader nutzen.
- Trennzeichen und Kopfzeile erklären.
- Eingelesene Zahlen umwandeln.
Tabellen als Textdatei
CSV speichert Tabellenzeilen in einer Textdatei. Ein Trennzeichen trennt die Felder. Je nach Herkunft ist das ein Komma, Semikolon oder anderes Zeichen. Wir legen für unsere Übung ein Semikolon fest und verwenden eine Kopfzeile mit den Feldnamen.
Eine CSV-Datei ist keine Excel-Arbeitsmappe: Sie enthält keine mehreren Tabellenblätter, Formate oder Formeln als Arbeitsmappenstruktur. Sie eignet sich aber gut für den Austausch einfacher Daten.
Eine Beispieldatei erzeugen
Speichere als messwerte_csv.py:
import csv
from pathlib import Path
pfad = Path(__file__).resolve().parent / "messwerte.csv"
messungen = [
{"nummer": 1, "gewicht_g": 18.2},
{"nummer": 2, "gewicht_g": 18.5},
{"nummer": 3, "gewicht_g": 18.4},
]
with pfad.open("w", newline="", encoding="utf-8") as datei:
schreiber = csv.DictWriter(
datei, fieldnames=["nummer", "gewicht_g"], delimiter=";"
)
schreiber.writeheader()
schreiber.writerows(messungen)
DictWriter schreibt Dictionaries anhand der festgelegten Feldnamen. writeheader() erzeugt die Kopfzeile, writerows() die Datenzeilen. newline="" überlässt dem CSV-Modul die Behandlung der Zeilenenden und vermeidet plattformbedingte zusätzliche Leerzeilen.
Die erzeugte Datei beginnt mit nummer;gewicht_g. Öffne sie zunächst in einem Texteditor. So erkennst du das tatsächliche Format, bevor eine Tabellenkalkulation Werte möglicherweise automatisch interpretiert.
Wieder einlesen
Ergänze unter dem bisherigen Programm:
with pfad.open("r", newline="", encoding="utf-8") as datei:
leser = csv.DictReader(datei, delimiter=";")
for zeile in leser:
nummer = int(zeile["nummer"])
gewicht_g = float(zeile["gewicht_g"])
print(f"Messung {nummer}: {gewicht_g:.1f} g")
Der Reader verwendet die Kopfzeile als Schlüssel. Feldinhalte werden zunächst als Text eingelesen. Für Berechnungen wandelst du sie bewusst um. Unser eigener Export verwendet Dezimalpunkte. Für fremde Daten mit Dezimalkomma musst du das vorher vereinbarte Format berücksichtigen.
Warum nicht split verwenden?
Ein Feld kann selbst ein Semikolon oder einen Zeilenumbruch enthalten. Das CSV-Modul schreibt dafür passende Anführungszeichen und kann sie wieder lesen. Ein einfaches split(";") könnte solche Daten zerlegen, obwohl sie zu einem Feld gehören.
Fremde Dateien prüfen
Kontrolliere Trennzeichen, Kodierung und Feldnamen. Bei einer UTF-8-Datei mit BOM kann encoding="utf-8-sig" beim Lesen helfen. Fehlen erwartete Spalten, solltest du das melden, bevor du Werte verarbeitest. Ein erkanntes CSV-Format garantiert noch keine gültigen Zahlen oder sinnvollen Messwerte.
Mitmach-Aufgabe
Schreibe eine bestand.csv mit den Spalten material und rest_g und zwei Zeilen: PLA/500 und PETG/300. Lies sie ein und berechne die Gesamtmenge.
Versuche die Aufgabe zuerst selbst. Vergleiche danach deinen Ansatz mit der Musterlösung. Andere Lösungen sind möglich, wenn sie dieselben Anforderungen erfüllen.
Musterlösung
import csv
from pathlib import Path
pfad = Path(__file__).resolve().parent / "bestand.csv"
with pfad.open("w", newline="", encoding="utf-8") as datei:
schreiber = csv.DictWriter(datei, fieldnames=["material", "rest_g"], delimiter=";")
schreiber.writeheader()
schreiber.writerows([
{"material": "PLA", "rest_g": 500},
{"material": "PETG", "rest_g": 300},
])
gesamt_g = 0
with pfad.open("r", newline="", encoding="utf-8") as datei:
for zeile in csv.DictReader(datei, delimiter=";"):
gesamt_g += float(zeile["rest_g"])
print(f"Gesamt: {gesamt_g:.1f} g")
Ergebnis prüfen
Es entsteht eine Datei mit Kopfzeile und zwei Datenzeilen. Die Konsole zeigt 800.0 g. Im Tabellenimport wählst du Semikolon als Trennzeichen.
Typische Stolperstellen
Die Feldnamen müssen exakt stimmen. DictReader wandelt Zahlen nicht automatisch um. Das Beispiel überschreibt seine Übungsdatei bei jedem Start.
Was du jetzt kannst
- DictWriter und DictReader nutzen.
- Trennzeichen und Kopfzeile erklären.
- Eingelesene Zahlen umwandeln.
Passendes Cheatsheet
Zum Nachschlagen: Cheatsheet 14 – CSV und JSON mit Python. Dort findest du auch den vorhandenen PDF-Download.
Im nächsten Teil
In Teil 17 geht es um Daten mit JSON dauerhaft speichern. Speichere Listen und Dictionaries als JSON und prüfe geladene Daten vor der Verarbeitung.
