Python pathlib: Forward-Slash statt Backward-Slash ausgeben

26. Januar 2021 von Michael Nissen · 

Die Verwendung von Python's pathlib hat einige Vorteile gegenüber der "traditionellen" Arbeit mit os.path. Dazu gehören unter anderem Interoperabilität zwischen Unix- und Windows-Systemen, aber auch viele hilfreiche Funktionen wie Path.is_dir(), Path.is_file() und so weiter. In meinen Augen hilft auch die "Slash"-Schreibweise bei Pfadangaben der Übersichtlichkeit. Eine gute Übersicht gibt es in den Artikeln von Trey Hunner (englisch).

Leider sind nicht alle Python-Bibliotheken mit Pathlib kompatibel - und erst recht nicht dann, wenn Pathlib unter Windows eingesetzt wird. In diesem Fall verwendet Pathlib (korrekterweise) automatisch einen Backslash ("\") als Trennzeichen. Das kann dann aber wieder zu Problemen führen - etwa mit der wfdb-Bibliothek, die zur Anzeige von Physionet-Daten verwendet werden kann.

Der folgende Code quittiert etwa unter Windows mit der Fehlermeldung "AttributeError: 'WindowsPath' object has no attribute 'endswith'" seinen Dienst:

data_folder = Path("D:/Data").resolve()
path_pathlib = (data_folder / "mimic3wdb-matched-1.0.physionet.org" / "matched" / "matched" / "p00" / "p000020" / "p000020-2183-04-28-17-47n")
record = wfdb.rdrecord(path_pathlib) 

Gibt man den Inhalt der Variable path_pathlib aus, stellt man fest, dass der Pfad mittels Backslashes getrennt wird. Damit kommt wfdb offensichtlich nicht zurecht.

D:\Data\mimic3wdb-matched-1.0.physionet.org\matched\matched\p00\p000020\p000020-2183-04-28-17-47n

Lösung: Etwas versteckt in der pathlib-Dokumentation (python.org, readthedocs.io) findet sich die Funktion "as_posix()". Damit lässt sich der Pfad im Posix-Style mit "Forward-Slashes" ausgeben und das Problem ist gelöst.

PurePath.as_posix()
Return a string representation of the path with forward slashes (/):

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Sie haben Fragen oder möchten ein Angebot anfordern?

Jetzt Kontakt aufnehmen
crosslist