HOWTO · Python

Verzeichnis aus Pfad in Python extrahieren

Dieses Tutorial zeigt, wie Sie einen Teil des Dateipfads in Python extrahieren.

Auf dieser Seite

Um das übergeordnete Verzeichnis eines Dateipfads zu erhalten, übergeben Sie den Pfad an os.path.dirname(). Als objektorientierte Alternative können Sie Path(file_path).parent aus pathlib verwenden. Beide liefern das Verzeichnis, in dem sich die Datei befindet; sie geben nicht das aktuelle Arbeitsverzeichnis des Prozesses zurück.

Die Beispiele verwenden Pfade mit Schrägstrichen, damit die Ergebnisse leicht lesbar sind. Pythons Pfadfunktionen interpretieren Pfade entsprechend dem Betriebssystem des Hosts. Verwenden Sie os.path.join() oder pathlib, um Pfade aus einzelnen Werten zusammenzusetzen, statt Trennzeichen von Hand einzufügen.

Pfadtrennzeichen verstehen

Ein Pfad trennt Verzeichnisnamen und die letzte Komponente durch ein plattformspezifisches Trennzeichen. Auf POSIX-Systemen wird üblicherweise / verwendet; Windows-Pfade verwenden meist \, und viele Pfadoperationen unter Windows akzeptieren auch /. os.sep liefert das Trennzeichen der aktuellen Plattform. Für die übliche Pfadverarbeitung können Sie den Pfad an os.path übergeben oder pathlib verwenden, statt die Trennzeichen selbst anhand der Plattform zu unterscheiden.

Einen Dateinamen mit os.path.basename erhalten

os.path.basename() gibt die letzte Komponente eines Pfads zurück. Bei einem Dateipfad ist das normalerweise der Dateiname einschließlich Erweiterung; das Verzeichnis wird nicht zurückgegeben. Um den Namen des letzten Verzeichnisses eines Dateipfads zu erhalten, ermitteln Sie zuerst mit os.path.dirname() dessen übergeordnetes Verzeichnis und übergeben dieses Ergebnis anschließend an os.path.basename().

import os

file_path = "/home/user/documents/report.txt"
filename = os.path.basename(file_path)
parent_directory = os.path.dirname(file_path)
last_directory = os.path.basename(parent_directory)

print(filename)
print(last_directory)
report.txt
documents

Dateiname und Erweiterung mit os.path.splitext trennen

os.path.splitext() trennt die Erweiterung der letzten Pfadkomponente vom übrigen Pfad und gibt ein Tupel (root, ext) zurück. Die Erweiterung ist entweder leer oder beginnt mit einem Punkt; das Verzeichnis gibt die Funktion nicht zurück. Wenn Sie das Verzeichnis benötigen, verwenden Sie os.path.dirname().

import os

file_path = "/home/user/documents/report.txt"
root, extension = os.path.splitext(file_path)

directory = os.path.dirname(file_path)
print(root)
print(extension)
print(directory)
/home/user/documents/report
.txt
/home/user/documents

Bei einem Dateinamen wie archive.tar.gz trennt splitext() nur das letzte Suffix .gz ab. Im zurückgegebenen Stamm bleibt also archive.tar enthalten. Die Verarbeitung der Erweiterung sollte daher der Namenskonvention Ihrer Anwendung entsprechen.

Ein Verzeichnis aus einem Dateipfad mit os.path.dirname erhalten

os.path.dirname() gibt den Verzeichnisanteil eines Pfads als Zeichenfolge zurück. Wenn Sie bereits einen Pfad als Zeichenfolge haben und das übergeordnete Verzeichnis seiner letzten Komponente benötigen, ist dies die passende Funktion. Im Inventar ist nur die englische API-Seite als verfügbar aufgeführt; ein deutsches Ziel ist nicht vorhanden.

import os

file_path = "/home/user/documents/report.txt"
directory = os.path.dirname(file_path)

print(directory)
/home/user/documents

Verwenden Sie für den Eingabewert und den Funktionsaufruf dieselbe Variable. Die Funktion verarbeitet den Pfadtext und prüft nicht, ob die Datei oder das Verzeichnis tatsächlich existiert. Wenn Sie das Verzeichnis erstellen, auflisten oder untersuchen möchten, verwenden Sie dafür separat die passende Dateisystemoperation.

Ein übergeordnetes Verzeichnis mit pathlib erhalten

pathlib stellt für die Pfadverarbeitung Path-Objekte bereit. Das Attribut Path.parent gibt den übergeordneten Pfad als weiteres Path-Objekt zurück. Das ist praktisch, wenn Sie mehrere Pfadoperationen verketten oder den Pfad an APIs übergeben möchten, die pfadähnliche Werte akzeptieren.

from pathlib import Path

file_path = Path("/home/user/documents/report.txt")
parent_directory = file_path.parent

print(parent_directory)
print(file_path.parts)
/home/user/documents
('/', 'home', 'user', 'documents', 'report.txt')

Path.parts ist ein Tupel mit den Komponenten des Pfads; es ist ein Attribut und keine Funktion. Verwenden Sie Path.parent, wenn Sie das übergeordnete Verzeichnis benötigen, und parts, wenn Sie einzelne Komponenten untersuchen oder über ihren Index abrufen möchten.

Relative Pfade auflösen und das aktuelle Arbeitsverzeichnis ermitteln

Ein relativer Pfad wird ausgehend vom aktuellen Arbeitsverzeichnis des Prozesses interpretiert. os.path.abspath() wandelt einen relativen Pfad auf Grundlage dieses Arbeitsverzeichnisses in einen absoluten Pfad um. Um das Verzeichnis zu erhalten, das den resultierenden Pfad enthält, übergeben Sie ihn an os.path.dirname(). Im Inventar ist nur die englische API-Seite als verfügbar aufgeführt; ein deutsches Ziel ist nicht vorhanden.

import os

relative_path = "documents/report.txt"
absolute_path = os.path.abspath(relative_path)
file_directory = os.path.dirname(absolute_path)

print(absolute_path)
print(file_directory)
/work/documents/report.txt
/work/documents

Path.cwd() gibt das aktuelle Arbeitsverzeichnis als Path-Objekt zurück, während os.getcwd() es als Zeichenfolge liefert. Beide beschreiben das Arbeitsverzeichnis des Prozesses, das sich vom Verzeichnis des Python-Skripts unterscheiden kann. Verwenden Sie diese Methoden, wenn Sie herausfinden möchten, wo relative Pfade beginnen. In einem Skript liefert Path(__file__).parent das Verzeichnis, in dem dieses Skript liegt.

import os
from pathlib import Path

print(Path.cwd())
print(os.getcwd())
/work
/work