HOWTO · Python

Dateierweiterung in Python holen

Es wird demonstriert, wie man die Dateierweiterung in Python erhält.

Auf dieser Seite

Um die Dateiendung eines Dateinamens in Python zu ermitteln, verwenden Sie os.path.splitext() für die letzte Endung oder pathlib.Path.suffixes, wenn Sie mehrere Endungsbestandteile benötigen, etwa bei .tar.bz2. Die folgenden Beispiele zeigen, wie die jeweiligen Ergebnisse aufgebaut sind, damit Sie die passende Form für Ihren Code wählen können.

Dateiendung in Python mit dem Modul os.path ermitteln

os.path stellt Hilfsfunktionen für den Umgang mit Betriebssystempfaden bereit. Die Funktion splitext() gibt ein Tupel mit zwei Elementen zurück: dem Stammpfad und der letzten Dateiendung. Übernehmen Sie das Tupel in dieser Reihenfolge, auch wenn Sie die Variablen anders benennen.

Führen Sie dieses Beispiel mit einem Pfad aus, der auf .docx endet:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import os

path = "/Users/user/Documents/sampledoc.docx"
root, extension = os.path.splitext(path)

print("Root:", root)
print("Extension:", extension)
Root: /Users/user/Documents/sampledoc
Extension: .docx

Die Ausgabe zeigt zuerst den Stammpfad und danach die Dateiendung. splitext() berücksichtigt nur die letzte Endung: Bei einem Namen wie backup.tar.gz trennt die Funktion .gz ab und lässt backup.tar im Stammpfad.

Die von splitext() zurückgegebene Endung enthält den vorangestellten Punkt. Das ist praktisch für Vergleiche wie extension == ".csv". Hat der Dateiname keine Endung, ist der Endungsteil eine leere Zeichenfolge und der Stammpfad bleibt der Dateiname. Ein führender Punkt allein zählt nach dieser Regel nicht als Endung: Ein Name wie .profile gilt daher als ohne Dateiendung.

Dateiendung in Python mit dem Modul pathlib ermitteln

pathlib stellt Pfade als Objekte dar. Erzeugen Sie aus einer Pfadzeichenfolge ein Path-Objekt und lesen Sie anschließend dessen Attribute aus: parent ist der übergeordnete Pfad, name die letzte Pfadkomponente und suffix die letzte Endung einschließlich des vorangestellten Punkts.

Bei einer Datei mit nur einer Endung wie sampledoc.docx ist path.suffix gleich .docx. Attribute enthalten Werte; lesen Sie sie daher ohne Klammern aus. Das folgende eigenständige Beispiel verdeutlicht auch den Unterschied zwischen suffix und suffixes:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import pathlib

single = pathlib.Path("/Users/user/Documents/sampledoc.docx")
archive = pathlib.Path("/Users/user/Documents/app_sample.tar.bz2")

print("Parent:", single.parent)
print("Filename:", single.name)
print("Final suffix:", single.suffix)
print("Suffix parts:", single.suffixes)
print("Archive suffix:", "".join(archive.suffixes))
Parent: /Users/user/Documents
Filename: sampledoc.docx
Final suffix: .docx
Suffix parts: ['.docx']
Archive suffix: .tar.bz2

Die Ausgabe zeigt den übergeordneten Pfad, den Dateinamen, die letzte Endung, die Liste der Endungen und die zusammengefügte Archivendung. suffixes ist eine Liste: Für sampledoc.docx enthält sie einen Eintrag, .docx; für app_sample.tar.bz2 enthält sie .tar und .bz2. Werden diese Bestandteile ohne Trennzeichen zusammengefügt, ergibt sich .tar.bz2. Das ist nützlich, wenn die Anwendung eine zusammengesetzte Endung als eine Einheit behandelt; viele Dateinamen haben jedoch nur eine Endung.

Hat ein Pfad keine Endung, ist Path.suffix eine leere Zeichenfolge und Path.suffixes eine leere Liste. Ein führender Punkt allein, wie bei .profile, wird nicht als Endung zurückgegeben. Behalten Sie die Liste, wenn der nachfolgende Code jeden Bestandteil einzeln prüfen soll. Fügen Sie die Bestandteile nur dann zusammen, wenn die Anwendung einen einzelnen zusammengesetzten Wert erwartet. Diese Attribute beziehen sich auf die letzte Namenskomponente des Pfads, unabhängig davon, ob der Pfad gerade auf eine vorhandene Datei verweist.

Wählen Sie os.path.splitext(), wenn Sie nur die letzte Endung benötigen oder zugleich den Stammpfad zurückerhalten möchten. Verwenden Sie Path.suffix für eine einzelne Endung mit einem objektorientierten Pfad und Path.suffixes, wenn Sie die Endungsbestandteile getrennt oder als zusammengesetzten Wert benötigen. Beide Ansätze untersuchen den Namen; keiner prüft, ob eine Datei existiert.