The book is currently only available in German.
Standard-Bibliothek — `pfad`
Verfügbar — implementiert in Phase B.7.1. Vollständige Spec in
docs/pfad.md.
Pfade aus Teilen zusammenbauen, in Komponenten zerlegen, normalisieren — portabel zwischen Windows und Unix. Reine String-Berechnungen ohne Filesystem-Zugriffe.
23.1 Aktivieren und OS-Trennzeichen
nutze pfad
sag pfad.trenner // "\" auf Windows, "/" auf Unix
sag pfad.listen_trenner // ";" auf Windows, ":" auf Unix (PATH-Variable)
23.2 Pfade bauen — pfad.verbunden
sag pfad.verbunden("home", "sascha", "datei.txt")
// auf Linux: "home/sascha/datei.txt"
// auf Windows: "home\sascha\datei.txt"
sag pfad.verbunden("/foo/", "/bar") // doppelter Trenner weg
// "/foo/bar"
Variadisch, mindestens 1 Argument. Leere Teile werden ignoriert. Doppelte Trennzeichen werden zusammengefasst.
23.3 Pfade zerlegen
Hinweis: Die folgenden Beispiel-Ausgaben sind in Unix-Schreibweise (
/). Auf Windows verwendetpfadden Backslash\— z.B. liefertpfad.verbunden("a", "b")dorta\b. Die Funktionen passen sich automatisch ans Betriebssystem an (§23.1).
nimm p = "/home/sascha/datei.tar.gz"
sag pfad.dateiname(p) // "datei.tar.gz"
sag pfad.ordner(p) // "/home/sascha"
sag pfad.erweiterung(p) // ".gz" ← nur letzte Erweiterung
sag pfad.basisname(p) // "datei.tar" ← Dateiname ohne letzte Erweiterung
sag pfad.zerlegt(p) // ["home", "sascha", "datei.tar.gz"]
Hidden-Files-Caveat: pfad.erweiterung(".gitignore") → ".gitignore" (Standard-Verhalten wie Python's os.path.splitext und Go's filepath.Ext). Wenn dich das stört, prüfe den Dateinamen selbst mit text.beginnt_mit(name, ".").
23.4 Pfade normalisieren
sag pfad.normalisiert("foo/./bar") // "foo/bar"
sag pfad.normalisiert("foo//bar") // "foo/bar"
sag pfad.normalisiert("foo/bar/..") // "foo"
sag pfad.normalisiert("foo/bar/../baz") // "foo/baz"
sag pfad.normalisiert("") // "."
normalisiert macht keine Filesystem-Zugriffe — .. wird rein syntaktisch aufgelöst. Wenn foo ein Symlink ist, folgt es dem nicht. Symlink-Auflösung kommt später, falls Bedarf.
23.5 Absolut und Relativ
nimm rel = "./datei.txt"
sag pfad.absolut(rel)
// auf Linux: "/home/sascha/projekt/datei.txt" (basierend auf CWD)
// auf Windows: "C:\Users\sascha\projekt\datei.txt"
sag pfad.ist_absolut(rel) // falsch
sag pfad.ist_relativ(rel) // wahr
sag pfad.relativ("/a/b", "/a/b/c/d") // "c/d"
sag pfad.relativ("/a/b", "/a/c") // "../c"
sag pfad.relativ("/a", "/a") // "."
23.6 Pfad + Datei kombinieren — das Standard-Pattern
nutze pfad
nutze datei
nimm projekt = "meine_app"
nimm config_pfad = pfad.verbunden(projekt, "config", "settings.json")
// Sicherstellen, dass das Verzeichnis existiert
datei.erstelle_ordner_rekursiv(pfad.ordner(config_pfad))
// Schreiben
datei.schreibe(config_pfad, "\{\}")
Warum pfad separat von datei? Trennung der Aufgaben: pfad ist reine String-Manipulation (testbar, deterministisch, OS-aware). datei macht echte IO. Wer einen Pfad nur bauen oder prüfen will, ohne Filesystem-Zugriff, nutzt pfad.
23.7 Was nicht in pfad ist
- Glob/Wildcard-Matching (
*.txt-Suche) — kommt später. ~-Expansion (Home-Verzeichnis) — Shell-spezifisch; kommt mitumgebung.home().- Symlink-Auflösung — selten gebraucht; kommt später falls Bedarf.
- URL-Pfade — kommt mit
netz-Modul.