Das Modul Python pathlib bietet eine sehr effektive Methode, um in der Pro­gram­mier­spra­che mit Da­tei­sys­tempfa­den zu in­ter­agie­ren. Neben einer ein­fa­che­ren Hand­ha­bung ist ins­be­son­de­re der knappere Code ein großer Vorteil des Moduls.

Was ist Python pathlib?

In der beliebten Pro­gram­mier­spra­che Python gibt es un­ter­schied­li­che Methoden, um mit Da­tei­sys­tempfa­den zu arbeiten. Seit Version 3.4 bietet Python mit pathlib zum Beispiel ein weiteres sehr nütz­li­ches und um­fang­rei­ches Tool, um be­triebs­sys­tem­un­ab­hän­gig mit Pfaden bzw. Paths zu in­ter­agie­ren.

Ins­be­son­de­re wenn Sie die Pfade nicht nur lesen oder be­ar­bei­ten, sondern auch zu­sätz­li­che Aufgaben und Ar­beits­schrit­te durch­füh­ren möchten, ist das Modul von großem Nutzen. Es er­mög­licht unter anderem auch die Er­stel­lung und das Kopieren einzelner Dateien und ihrer Be­stand­tei­le. Ver­ein­facht wird dies vor allem durch die über­ge­ord­ne­te Ober­flä­che von Python pathlib. Das Modul gehört zur Stan­dard­bi­blio­thek und ersetzt bzw. vereint zahl­rei­che weitere Methoden.

Managed Nextcloud by IONOS Cloud
Team­ar­beit in der eigenen Cloud
  • Voll­stän­di­ge Da­ten­sou­ve­rä­ni­tät in deutschen Re­chen­zen­tren
  • Managed Service ohne Ad­mi­nis­tra­ti­ons­auf­wand
  • File-Sharing, Do­ku­men­ten­be­ar­bei­tung & Kom­mu­ni­ka­ti­on

Ob­jekt­ori­en­tier­te Dar­stel­lung von Pfaden

Einer der großen Vorteile von Python pathlib ist, dass das Modul es Nut­ze­rin­nen und Nutzern erlaubt, Paths nicht mehr als Strings, sondern statt­des­sen ob­jekt­ori­en­tiert dar­zu­stel­len. Während der bisherige Weg oft um­ständ­lich war und mehrere State­ments selbst für einfache Aufgaben benötigte, wurde die Syntax für das neue Modul deutlich ver­ein­facht. Da Sie in der Regel mit der Klasse Path arbeiten werden, sollten Sie diese vor der Arbeit an einem Projekt einfach im­por­tie­ren. Dies er­mög­licht Ihnen im weiteren Verlauf die Er­stel­lung eines kom­pak­te­ren Codes. Für den Import verwenden Sie einfach den folgenden Befehl:

from pathlib import Path
python

Um nun eine Path-Instanz zu erstellen, können Sie bereits Python pathlib nutzen. Dafür eignet sich der folgende Code, bei dem wir die beiden Kom­po­nen­ten „farben“ und „blau.txt“ verwenden. Mit einem einfachen Befehl wird dann eine neue Instanz erstellt:

from pathlib import Path
blau = Path("farben", "blau.txt")
print(blau)
python

Die Ausgabe würde dann bei­spiel­haft so aussehen:

farben/blau.txt
python

Python setzt also in der Ausgabe das Be­triebs­sys­tem­trenn­zei­chen zwischen die beiden Kom­po­nen­ten. Während dieses in unserem Beispiel ein rechts­ge­rich­te­ter Schräg­strich / ist, kann die Ausgabe auf einem Rechner mit Windows statt­des­sen einen Rück­strich oder Backslash \ enthalten. Für Linux und macOS bleibt der Schräg­strich bestehen.

Ver­zeich­nis­se aufrufen mit Python pathlib

Nachdem Sie Path im­por­tiert haben, können Sie mit Python pathlib die un­ter­schied­li­chen Methoden der Klasse nutzen. Dazu gehört unter anderem der Zugriff auf bestimmte Ver­zeich­nis­se. Wenn Sie den folgenden Code ausführen, rufen Sie zum Beispiel Ihr aktuelles Ar­beits­ver­zeich­nis auf:

from pathlib import Path
Path.cwd()
python

Das ist unter anderem dann wichtig, wenn Sie eine Datei im selben Ver­zeich­nis öffnen möchten, in dem auch Ihr der­zei­ti­ges Skript aus­ge­führt wird.

Auch ein Zugriff auf das Ho­me­ver­zeich­nis des aktuellen Users bzw. der aktuellen Userin ist mit Python pathlib möglich. Es ist emp­feh­lens­wert, dieses Ver­zeich­nis als Aus­gangs­punkt zu wählen, um mit den ent­spre­chen­den Pfaden im weiteren Verlauf auch auf un­ter­schied­li­chen Rechnern arbeiten zu können, falls das nötig sein sollte. Der passende Code sieht aus wie folgt:

from pathlib import Path
Path.home()
python

Zugriff mithilfe eines Strings

Statt mit Ihrem Arbeits- oder Ho­me­ver­zeich­nis zu beginnen, ist es auch mit Python pathlib nach wie vor möglich, eine Datei oder ein Ver­zeich­nis mit Hilfe eines Strings an­zu­steu­ern. Bei­spiel­haft würde der ent­spre­chen­de Code fol­gen­der­ma­ßen aussehen:

from pathlib import Path
Path(r"C:\Users\name\ordner\datei.txt")
python

Dabei wird der String in einen Pfad um­ge­wan­delt und kann so einfacher genutzt werden. Das kleine r vor dem String weist diesen als so­ge­nann­ten „raw string literal“ aus. Dies sorgt dafür, dass der Backslash tat­säch­lich in dieser Funktion genutzt wird. Er kann ansonsten nämlich auch als Kenn­zeich­nung einer nicht druck­ba­ren Variablen verwendet werden.

Pfade oder Strings verbinden

Eine weitere Methode, um mit Python pathlib einen neuen Pfad zu erstellen, ist die Ver­bin­dung einzelner Paths oder Strings. Dafür haben Sie zwei Mög­lich­kei­ten.

Durch die Nutzung eines einzelnen Schräg­strichs verbinden Sie zwei Elemente zu einem neuen Pfad. Das könnte bei­spiel­haft so aussehen:

from pathlib import Path
for file_path in Path.cwd().glob("*.txt"):
	neuer_pfad = Path("beispiel") / file_path.name
	file_path.rename(neuer_pfad)
python

Al­ter­na­tiv verwenden Sie die Methode joinpath() und erzielen das gleiche Ergebnis:

from pathlib import Path
Path.home().joinpath("beispiel", "unterordner", "datei.py")
python

Einzelne Be­stand­tei­le nutzen

Wenn Sie einen Path in seine Be­stand­tei­le zerlegen und diese nutzen möchten, bietet Ihnen Python pathlib ebenfalls das passende Werkzeug dafür. Im folgenden Code finden Sie dafür einige Beispiele:

from pathlib import Path
path = Path(r"C:\Users\name\ordner\datei.txt")
path
path.anchor
path.name
path.parent
path.parent.parent
path.stem
path.suffix
python
  • .anchor: Be­rück­sich­tigt den Teil vor den ei­gent­li­chen Ver­zeich­nis­sen; dieser kann auch je nach Be­triebs­sys­tem variieren
  • .name: Be­rück­sich­tigt nur den Namen der Datei ohne einen Bezug zum Ver­zeich­nis
  • .parent: Be­rück­sich­tigt das Ver­zeich­nis, in dem eine Datei zu finden ist; ist der Pfad selbst ein Ver­zeich­nis, wird das über­ge­ord­ne­te Ver­zeich­nis genutzt
  • .stem: Be­rück­sich­tigt lediglich den Namen der Datei und lässt dabei die Da­tei­endung weg
  • .suffix: Be­rück­sich­tigt aus­schließ­lich die Da­tei­endung

Die ent­spre­chen­den Ausgaben würden dann so aussehen:

'C:\\'
'datei.txt'
WindowsPath('C:/Users/name/ordner')
WindowsPath('C:/Users/name')
'datei'
'.txt'
python

Dateien auslesen oder schreiben

Zwar ist es auch möglich, Dateien mit anderen Mitteln zu schreiben oder aus­zu­le­sen, mit Python pathlib können Sie dabei al­ler­dings den Code deutlich ver­knap­pen. Um die Funk­ti­ons­wei­se besser zu ver­an­schau­li­chen, erstellen wir eine einfache Liste, die Tiere und Pflanzen enthält. So sieht sie aus:

<!-- beispielliste.md ->
# Beispielliste
## Tiere
* Hund
* Katze
* Maus
## Pflanzen
* Rose
* Nelke
text

Nun nutzen wir die stan­dard­mä­ßi­ge Funktion open() mit Python pathlib, um sämtliche Tiere und Pflanzen aus der Liste zu filtern und aus­zu­ge­ben. Der ent­spre­chen­de Code sieht dabei so aus:

from pathlib import Path
path = Path.cwd() / "beispielliste.md"
with path.open(mode="r", encoding="utf-8") as md_file:
	content = md_file.read()
	ausgabe = [line for line in content.splitlines() if line.startswith("*")
python

Da­tei­na­men ändern

Um Da­tei­na­men zu verändern, sind mit Python pathlib ebenfalls nur wenige Zeilen Code nötig. Das Modul nutzt dafür die Methode .with_name(), mit dem Name und Da­tei­endung angepasst werden können. Der ent­spre­chen­de Code folgt diesem Muster:

from pathlib import Path
md_path = Path("/Users/name/ordner/blau.md")
txt_path = md_path.with_name("rot.txt")
md_path.replace(txt_path)
python

Dateien mit Python pathlib kopieren

Auch wenn Path selbst keine Methode zum Kopieren kennt, können Sie .with_stem() nutzen, um eine Datei zu du­pli­zie­ren. Dabei wird ein neuer Dateiname angelegt, ohne die Da­tei­endung zu ändern. Dies ist ein Beispiel für den passenden Code:

from pathlib import Path
source = Path("beispielliste.md")
destination = source.with_stem("neues_beispiel")
destination.write_bytes(source.read_bytes())
python

Dateien ver­schie­ben

Wenn Sie mit Python pathlib Dateien ver­schie­ben oder löschen möchten, sollten Sie dabei beachten, dass das System keine weiteren Nach­fra­gen stellt. Es ist also Vorsicht geboten, damit Sie keine wichtigen In­for­ma­tio­nen verlieren. Mit .replace() ver­schie­ben Sie eine Datei. Sollte eine Datei mit demselben Namen am Zielort bereits exis­tie­ren, wird diese über­schrie­ben. Auch hier sollten Sie sich also Ihrer Ent­schei­dung sicher sein. Es gibt al­ler­dings die Mög­lich­keit, im Vorfeld zu über­prü­fen, ob diese Gefahr überhaupt besteht. Der Code sieht dann insgesamt so aus:

from pathlib import Path
source = Path("blau.py")
destination = Path("rot.py")
if not destination.exists():
	source.replace(destination)
python

Leere Dateien erstellen

Um Python pathlib zur Er­stel­lung einer leeren Datei zu nutzen, schreiben Sie diesen Code:

from pathlib import Path
filename = Path("neu.txt")
filename.exists()
filename.touch()
filename.exists()
filename.touch()
python
Tipp

Mit GitHub ans Ziel: Deploy Now von IONOS bietet Ihnen au­to­ma­ti­sier­te De­ploy­ments, die Sie mit nur drei Schritten umsetzen. Nach dem Prinzip „Push, build und deploy“ führen Sie Än­de­run­gen noch schneller durch. Wir beraten Sie gerne zu unseren un­ter­schied­li­chen Ta­rif­mo­del­len.

Zum Hauptmenü