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