Pfade verketten mit Pathlib
Alter Wein in neuen Schläuchen?
Die finale Lösung für Pfadverkettung sah im früheren Beispiel so aus:
path_file = os.sep.join([path_dir, filename])
Das Positive daran ist, dass die Lösung unabhängig vom Betriebssystem funktioniert und Strings nicht direkt mit „+“-Zeichen oder String-Formatierungen kombinieren muss.
Es besteht jedoch noch ein Fehlerpotential, nämlich wenn jemand den Verzeichnispfad versehentlich oder aus falscher Überzeugung mit einem abschließenden Pfadtrenner definiert.
path_dir: str = r"C:/Users/sselt/Documents/blog_demo/" # abschließender Trenner
filename: str = "some_file"
path_file = os.sep.join([path_dir, filename])
# C:/Users/sselt/Documents/blog_demo/\some_file
Dieses Beispiel zeigt zwar funktionierenden Code, der Aufruf des Pfades wird aufgrund des letzten fehlerhaften Trenners jedoch einen Fehler verursachen. Solche Fehler können ständig auftauchen, wenn User die Pfade in Config-Files, weit weg vom Code, pflegen und nicht auf die Konventionen achten.
Seit Python 3.4 gibt es jedoch eine bessere Lösung in Form des pathlib-Moduls. Es deckt die datei- und ordnerbezogenen Funktionen des os-Moduls von Python über einen objektorientierten Ansatz ab.
Hier zunächst die alte Variante:
import os
path = "C:/Users/sselt/Documents/blog_demo/"
os.path.isdir(path)
os.path.isfile(path)
os.path.getsize(path)
Und hier die neue Alternative
from pathlib import Path
path: Path = Path("C:/Users/sselt/Documents/blog_demo/")
path.is_dir()
path.is_file()
path.stat().st_size
Beides liefert hier genau dieselben Ergebnisse. Warum ist die zweite Variante so viel besser?