31.2 Dateipfade – os.path 

Verschiedene Plattformen – verschiedene Pfadnamenskonventionen. Während beispielsweise Windows-Betriebssysteme zu Beginn eines absoluten Pfadnamens das Laufwerk erwarten, auf das sich der Pfad bezieht, wird unter Unix ein Slash vorangestellt. Außerdem unterscheiden sich auch die Trennzeichen für einzelne Ordner innerhalb des Pfadnamens, denn Microsoft hat sich im Gegensatz zur Unix-Welt, in der der Slash üblich ist, für den Backslash entschieden.
Als Programmierer für plattformübergreifende Software stehen Sie nun vor dem Problem, dass Ihre Programme mit diesen verschiedenen Konventionen und auch denen dritter Betriebssysteme zurechtkommen müssen.
Damit dafür keine programmtechnischen Verrenkungen notwendig werden, wurde das Modul os.path entwickelt, mit dem Sie Pfadnamen komfortabel verwenden können.
Sie können das Modul auf zwei verschiedene Arten nutzen:
- Sie importieren erst os und greifen dann über os.path darauf zu.
- Sie importieren os.path direkt.
Tabelle 31.4 gibt Ihnen einen Überblick über die wichtigsten Funktionen des Moduls os.path.
Name | Beschreibung |
---|---|
abspath(path) | Gibt zu einem relativen Pfad den dazugehörigen absoluten und normalisierten Pfad (siehe dazu os.normpath) zurück. |
basename(path) | Gibt den Basisnamen des Pfades zurück. |
commonprefix(list) | Gibt den längsten gemeinsamen Basispfad der Pfadliste list zurück. |
dirname(path) | Gibt den Pfad zu dem Verzeichnis zurück, in dem sich path befindet. |
exists(path) | Gibt True zurück, wenn der Pfad path im Dateisystem existiert, sonst False. |
getatime(path) | Gibt den Zeitpunkt des letzten Zugriffs auf path als Unix-Zeitstempel zurück. |
getmtime(path) | Gibt den Zeitpunkt der letzten Änderung von path als Unix-Zeitstempel zurück. |
getsize(path) | Gibt die Größe der unter path zu findenden Datei in Bytes zurück. Der Rückgabewert ist dabei immer eine int-Instanz. |
isabs(path) | Der Rückgabewert ist True, wenn es sich bei path um eine absolute Pfadangabe handelt, sonst False. |
isfile(path) | Gibt True zurück, wenn path auf eine Datei verweist, sonst False. Die Funktion folgt dabei gegebenenfalls symbolischen Links. |
isdir(path) | Wenn der übergebene Pfad auf einen Ordner verweist, wird True zurückgegeben, ansonsten False. |
islink(path) | Gibt True zurück, wenn unter path ein symbolischer Link zu finden ist, sonst False. |
join(path1, [path2, …]) | Verkettet die übergebenen Pfadbausteine zu einem Gesamtpfad. |
normcase(path) | Wandelt einen Unix-Pfad in einen Windows-Pfad um. |
realpath(path) | Gibt einen zu path äquivalenten Pfad zurück, der keine Umwege über symbolische Links enthält. |
split(path) | Spaltet path in Verzeichnis und Datei auf. |
splitdrive(path) | Spaltet path in den Laufwerksbuchstaben und Pfad auf dem Laufwerk auf. |
splitext(path) | Teilt den path in den Pfad zu der Datei und die Dateiendung. Beide Elemente werden in einem Tupel zurückgegeben. |
Tabelle 31.4 Die wichtigsten Funktionen des Moduls os.path
abspath(path)
Diese Funktion gibt zu einem relativen Pfad den dazugehörigen absoluten und normalisierten Pfad (siehe dazu os.normpath) zurück. Das folgende Beispiel verdeutlicht die Arbeitsweise:
>>> os.path.abspath(".")
'Z:\\beispiele\\os'
In diesem Fall haben wir mithilfe des relativen Pfades "." auf das aktuelle Verzeichnis herausgefunden, dass unser Skript unter 'Z:\\beispiele\\os' gespeichert ist.
basename(path)
Diese Funktion gibt den sogenannten Basisnamen des Pfades zurück. Der Basisname eines Pfades ist der Teil hinter dem letzten Ordnertrennzeichen, wie zum Beispiel \ oder /. Diese Funktion eignet sich sehr gut, um den Dateinamen aus einem vollständigen Pfad zu extrahieren:
>>> os.path.basename(r"C:\Windows\System32\ntoskrnl.exe")
'ntoskrnl.exe'
[»] Hinweis
Diese Funktion unterscheidet sich von dem Unix-Kommando basename dadurch, dass sie einen leeren String zurückgibt, wenn der String mit einem Ordnertrennzeichen endet:
>>> os.path.basename(r"/usr/include/")
''
Im Gegensatz dazu sieht die Ausgabe des gleichnamigen Unix-Kommandos so aus:
$ basename /usr/include/
include
commonprefix(list)
Diese Funktion gibt einen möglichst langen String zurück, mit dem alle Elemente der als Parameter übergebenen Pfadliste list beginnen:
>>> os.path.commonprefix([r"C:\Windows\System32\ntoskrnl.exe",
... r"C:\Windows\System\TAPI.dll",
... r"C:\Windows\system32\drivers"])
'C:\\Windows\\'
Es ist aber nicht garantiert, dass der resultierende String auch ein gültiger und existierender Pfad ist, da die Pfade als einfache Strings betrachtet werden.
dirname(path)
Diese Funktion gibt den Ordnerpfad von path zurück:
>>> os.path.dirname(r"C:\Windows\System\TAPI.dll")
'C:\\Windows\\System'
Genau wie bei os.path.basename müssen Sie auch hier das abweichende Verhalten bei Pfaden beachten, die mit einem Ordnertrennzeichen enden:
>>> os.path.dirname(r"/usr/include")
'/usr'
>>> os.path.dirname(r"/usr/include/")
'/usr/include'
exists(path)
Diese Funktion gibt True zurück, wenn der angegebene Pfad auf eine existierende Datei oder ein vorhandenes Verzeichnis verweist, ansonsten False.
getatime(path)
Diese Funktion gibt den Unix-Zeitstempel des letzten Zugriffs auf den übergebenen Pfad zurück. Kann auf die übergebene Datei oder den Ordner nicht zugegriffen werden oder ist dieses Element nicht vorhanden, führt dies zu einem os.error.[ 126 ](Unix-Zeitstempel sind Ganzzahlen, die die Sekunden seit Beginn der Unix-Epoche, also seit dem 01.01.1970 angeben. )
getmtime(path)
Diese Funktion gibt einen Unix-Zeitstempel zurück, der angibt, wann die Datei oder der Ordner unter path zum letzten Mal verändert wurde. Existiert der übergebene Pfad nicht im Dateisystem, wird os.error geworfen.
join(path1, [path2, …])
Diese Funktion fügt die übergebenen Pfadangaben zu einem einzigen Pfad zusammen, indem sie verkettet werden. Dabei wird das übliche Trennzeichen des Betriebssystems verwendet:
>>> os.path.join(r"C:\Windows", r"System\ntoskrnl.exe")
'C:\\Windows\\System\\ntoskrnl.exe'
Wird ein absoluter Pfad als zweites oder späteres Argument übergeben, ignoriert os.path.join alle vorher übergebenen Pfade:
>>> os.path.join(r"Das\wird\ignoriert", r"C:\Windows", r"System\ntoskrnl.exe")
'C:\\Windows\\System\\ntoskrnl.exe'
normcase(path)
Auf Betriebssystemen, die bei Pfaden nicht hinsichtlich Groß- und Kleinschreibung unterscheiden (z. B. Windows), werden alle Großbuchstaben durch ihre kleinen Entsprechungen ersetzt. Außerdem werden unter Windows alle Slashs durch Backslashs ausgetauscht:
>>> os.path.normcase(r"C:\Windows/System32/ntoskrnl.exe")
'c:\\windows\\system32\\ntoskrnl.exe'
Unter Unix wird der übergebene Pfad ohne Änderung zurückgegeben.
split(path)
Diese Funktion teilt den übergebenen Pfad in den Namen des Ordners oder der Datei, die er beschreibt, und den Pfad zu dem direkt übergeordneten Verzeichnis und gibt ein Tupel zurück, das die beiden Teile enthält:
>>> os.path.split(r"C:\Windows\System32\ntoskrnl.exe")
('C:\\Windows\\System32', 'ntoskrnl.exe')
[»] Hinweis
Wenn der Pfad mit einem Slash oder Backslash endet, ist das zweite Element des Tupels ein leerer String:
>>> os.path.split("/home/revelation/")
('/home/revelation', '')
splitdrive(path)
Diese Funktion teilt den übergebenen Pfad in die Laufwerksangabe und den Rest, sofern die Plattform Laufwerksangaben unterstützt:
>>> os.path.splitdrive(r"C:\Windows/System32/ntoskrnl.exe")
('C:', '\\Windows/System32/ntoskrnl.exe')
Unter Betriebssystemen, die keine Laufwerksbuchstaben unterstützen, ist der erste String des Tupels ein leerer String:
>>> os.path.splitdrive("/usr/share/bin")
('', '/usr/share/bin')
splitext(path)
Diese Funktion teilt den path in den Pfad zu der Datei und die Dateiendung. Beide Elemente werden in einem Tupel zurückgegeben:
>>> os.path.splitext(r"C:\Windows\System32\Notepad.exe")
('C:\\Windows\\System32\\Notepad', '.exe')