Generatoren in Datenpipelines
Idee
from pathlib import Path
def zeilen(pfad: Path):
with pfad.open(encoding="utf-8") as f:
for zeile in f:
yield zeile.rstrip("\n")
def nur_error(zeilen):
for z in zeilen:
if "error" in z.lower():
yield z
def mit_nummer(zeilen):
for i, z in enumerate(zeilen, start=1):
yield f"{i}: {z}"
# pipeline
# for out in mit_nummer(nur_error(zeilen(Path("app.log")))):
# print(out)
Jede Stufe liefert bei Bedarf weiter – super bei großen Dateien.
Rate mal!
Warum nicht read().splitlines() bei Riesenlogs?
Auflösung
Alles auf einmal im RAM – Generatoren streamen zeilenweise.
Probiere es selbst
Experiment 1
zeilen-Generator.
Experiment 2
Filter-Stufe.
Experiment 3
Drei Stufen verbinden.
Übungen
Level 1
Pipeline skizzieren (3 Kästen).
Level 2
Filter "ok".
Level 3
Zähle gefilterte Zeilen mit sum(1 for ...).
Level-3-Lösung
n = sum(1 for z in nur_error(zeilen(Path("app.log"))))
print(n)
Mini-Quiz
Pipeline sitzt! Mini-Projekt: Log-Analyse.