Abschnitt 12 · Lektion 7
Bau dir was
Das eigentliche Ziel dieses Kurses sind deine Dateien und das, was dich an ihnen nervt. Die Werkzeuge bis jetzt hat sich der Kurs ausgedacht, einen Aufräumer für den Download-Ordner, eine Telefonliste, einen Kontoauszug. Diese Lektion hat deshalb keine Aufgabe. Was auf deinem Rechner entsteht, lässt sich von hier aus nicht prüfen, und der Kurs tut auch nicht so. Stattdessen stehen hier Ideen, die mit dem, was du jetzt kannst, schon gehen, und wie man so etwas angeht.
Wie man so ein Werkzeug angeht
Am Anfang steht wie beim Spritkostenrechner in Lektion 2.7 der Zettel mit den drei Fragen. Was geht hinein, was soll herauskommen, und wie kommt man vom einen zum anderen? Hinein geht eine Datei, ein Ordner oder ein Export aus einem Programm. Heraus kommt eine Zahl, eine Liste oder eine neue Datei. Wenn du das in ein paar Sätzen aufschreiben kannst, hast du den schwierigsten Teil hinter dir.
Danach fängt man klein an. Erst nur einlesen und ausgeben, was gelesen wurde. Wenn das stimmt, kommt das Rechnen dazu, und wenn auch das stimmt, das Schreiben einer Datei. Jeder Schritt läuft einmal, bevor der nächste dazukommt. Geht dann etwas schief, weißt du, in welchem Schritt.
Ausprobiert wird an einer Kopie, nie an den echten Dateien. Das war schon beim Aufräumer so, und es gilt für jedes Programm, das etwas schreibt, umbenennt oder verschiebt. Zu Hause startest du es so, wie es in Lektion 11.1 steht, und wenn es zuverlässig läuft, auch zu festen Zeiten.
Doppelte in der Mitgliederliste
Nachname;Vorname;Eintritt
Weber;Karl;12.03.2019
Lorenz;Mia;01.06.2021
weber;karl ;12.03.2019
Demir;Aylin;15.09.2023
Lorenz; Mia;01.06.2021 import csv
from collections import Counter
namen = Counter()
with open("mitglieder.csv", encoding="utf-8-sig", newline="") as datei:
for mitglied in csv.DictReader(datei, delimiter=";"):
vorname = mitglied["Vorname"].strip().title()
nachname = mitglied["Nachname"].strip().title()
namen[f"{vorname} {nachname}"] += 1
for name, anzahl in namen.items():
if anzahl > 1:
print(f"{name} steht {anzahl}-mal in der Liste") Vereinslisten wachsen über Jahre, und irgendwann steht jemand zweimal darin. Einmal sauber und
einmal mit einem Leerzeichen zu viel oder klein geschrieben. Dafür braucht es das Einlesen mit
csv.DictReader, das Putzen mit strip() und title() und das Zählen mit Counter.
Geputzt wird vor dem Zählen. Sonst sind „Karl Weber“ und „karl weber“ für Python zwei verschiedene Leute. Ausbauen lässt sich das mit dem Eintrittsdatum, denn zwei Einträge mit gleichem Namen und anderem Datum sind vielleicht wirklich zwei Personen.
Nebenkosten über die Jahre
{
"Heizung": "1184.20",
"Wasser": "312.75",
"Müll": "148.00",
"Hausmeister": "240.00"
} {
"Heizung": "1302.65",
"Wasser": "298.40",
"Müll": "151.20",
"Hausmeister": "240.00",
"Gartenpflege": "96.00"
} import json
from decimal import Decimal
with open("nebenkosten-2025.json", encoding="utf-8") as datei:
vorher = json.load(datei)
with open("nebenkosten-2026.json", encoding="utf-8") as datei:
jetzt = json.load(datei)
for posten, betrag in jetzt.items():
unterschied = Decimal(betrag) - Decimal(vorher.get(posten, "0"))
print(f"{posten}: {betrag} Euro ({unterschied:+.2f})") Die Nebenkostenabrechnung kommt einmal im Jahr, und die Frage ist immer dieselbe. Was ist teurer
geworden? Jedes Jahr entsteht eine JSON-Datei mit den Posten, die Beträge als Text, aus dem
Decimal sie genau zurückholt. Ein kleines Programm vergleicht dann zwei davon.
Mit vorher.get(posten, "0") bricht ein neuer Posten wie die Gartenpflege nicht ab, sondern steht
mit seinem ganzen Betrag als Unterschied da. Durch das + in :+.2f steht auch beim Plus ein
Vorzeichen, und du siehst auf einen Blick, was teurer wurde.
Noch mehr Ideen
Den Download-Ordner nach Monaten sortieren. Das ist der Aufräumer mit einer anderen Regel. Statt
nach der Endung wird nach dem Monat sortiert, in dem die Datei zuletzt geändert wurde. Neu ist dafür
nur eine Zeile. datei.stat().st_mtime ist der Zeitpunkt der letzten Änderung, gezählt in Sekunden
seit 1970. datetime.fromtimestamp(...) macht daraus einen Zeitpunkt mit Datum und Uhrzeit, und mit
strftime("%Y-%m") wird daraus ein Ordnername wie 2026-10.
Fotos nach Datum umbenennen. Umbenannt wurden schon einmal Fotos, in deren Name das Datum schon steckte. Für alle anderen geht dieselbe Zeile wie beim Download-Ordner, mit dem Datum der letzten Änderung. Das echte Aufnahmedatum steht in den Fotos selbst, in den sogenannten EXIF-Daten. Die liest Python erst mit einem Paket, und Pakete kommen in Abschnitt 13.
Der Kontoauszug, jeden Monat. Das Werkzeug für den Kontoauszug schreibt bericht.json. Damit
geht der Vergleich mit dem Vormonat genauso wie bei den Nebenkosten. Den alten Bericht einlesen, den
neuen danebenlegen und die Unterschiede ausgeben.
Eine Tabelle, die du jeden Monat von Hand zusammenzählst. Die Spalte mit der Summe, die Zusammenfassung für die Chefin, die Liste für den Kassenprüfer. Wenn du dabei jedes Mal dieselben Schritte machst, sind das die Schritte deines Programms.
Am besten fängt man mit dem an, was am meisten nervt.
Zum Mitnehmen
Am Anfang eines eigenen Werkzeugs stehen drei Fragen auf Papier, danach wächst es Schritt für Schritt vom Einlesen über das Rechnen zum Schreiben. Ausprobiert wird mit einer Kopie der echten Dateien, und erst das fertige Programm läuft zu Hause an den Originalen.
Jetzt du
Basis Konto, kostenlosIm Editor änderst du die Beispiele dieser Lektion und lässt sie gleich laufen. So merkst du am schnellsten, ob es sitzt.
Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.
In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.
Was in dieser Lektion steckt
-
Artikel mit 2 Beispielen zum Ausprobieren
Steht hier, ohne Konto lesbar.