mitmario.dev

Bau dir was

Python Sandbox 3 Min Lesezeit 2 BeispieleLektion 7 von 8

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

Doppelte in der Mitgliederliste
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

Nebenkosten im Vergleich
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, kostenlos

Im 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.