HOWTO · Python
Python Get Dateiname ohne Erweiterung aus Pfad
Dieses Tutorial demonstriert, wie man in Python den Dateinamen ohne Erweiterung aus dem Dateipfad ermittelt
Auf dieser Seite
Um aus einem Pfad einen Dateinamen ohne seine letzte Endung zu erhalten, verwenden Sie Path(file_path).stem. Der Pfad Desktop/folder/myfile.txt hat beispielsweise den Stamm myfile. Path.stem ist eine Eigenschaft und wird daher ohne Klammern verwendet. Die folgenden Beispiele verwenden einen Pfad als Zeichenkette und geben den resultierenden Namen aus.
Dateinamen ohne letzte Endung mit Path.stem ermitteln
pathlib.Path berücksichtigt die Pfadtrennzeichen des aktuellen Betriebssystems. Sie müssen den Pfad daher nicht selbst zerlegen. Erstellen Sie aus der Zeichenkette ein Path-Objekt und lesen Sie anschließend dessen Eigenschaft stem aus. Dadurch wird die letzte Endung entfernt, während frühere Punkte im Dateinamen erhalten bleiben.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
from pathlib import Path
file_path = "Desktop/folder/myfile.txt"
file_name = Path(file_path).stem
print(file_name)
myfile
Mit os.path.splitext() die letzte Endung entfernen
Die Standardbibliotheksfunktion os.path.splitext() gibt ein Paar zurück: den Pfadteil vor der letzten Endung und die Endung selbst. Wählen Sie das erste Element aus, um diese Endung zu entfernen. Wenn Sie zusätzlich nur die letzte Pfadkomponente benötigen, funktioniert das Aufteilen an / in diesem Beispiel. Diese Methode ist jedoch an dieses Trennzeichen gebunden und daher weniger portabel zwischen Betriebssystemen.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import os
file_path = "Desktop/folder/myfile.txt"
path_without_suffix = os.path.splitext(file_path)[0]
file_name = path_without_suffix.split("/")[-1]
print(file_name)
myfile
Zuerst den Basisnamen ermitteln, dann die Endung entfernen
Für eine pfadbewusste Lösung mit os.path rufen Sie zuerst os.path.basename() auf, um die letzte Pfadkomponente zu erhalten. Übergeben Sie dieses Ergebnis anschließend an os.path.splitext(). Der Basisname von Desktop/folder/myfile.txt ist myfile.txt; nach dem Entfernen seiner letzten Endung bleibt myfile. Bei diesem Vorgehen müssen Sie kein Pfadtrennzeichen selbst auswählen.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import os
file_path = "Desktop/folder/myfile.txt"
basename = os.path.basename(file_path)
file_name = os.path.splitext(basename)[0]
print(file_name)
myfile
Zusammengesetzte Endungen und Punkte in Dateinamen berücksichtigen
Diese Standardmethoden entfernen eine einzelne letzte Endung, nicht alle durch Punkte getrennten Teile. Für myfile.tar.gz liefern sowohl Path.stem als auch os.path.splitext() den Wert myfile.tar. Das ist passend, wenn nur .gz als Endung gilt. Behandelt die Anwendung .tar.gz als eine zusammengesetzte Endung, entfernen Sie diese bekannte Endung gezielt, zum Beispiel mit name.removesuffix(".tar.gz"). str.removesuffix() gibt es seit Python 3.9; dieser Ausdruck erfordert daher Python 3.9 oder eine neuere Version. In älteren Versionen können Sie stattdessen name[:-len(".tar.gz")] if name.endswith(".tar.gz") else name verwenden, um genau diese Endung sicher zu entfernen.
Ein Name ohne Endung, etwa README, bleibt mit Path.stem und os.path.splitext() unverändert README. Ein Name mit führendem Punkt wie .bashrc gilt als Punktdatei ohne Endung: Sowohl Path(".bashrc").stem als auch os.path.splitext(".bashrc")[0] geben .bashrc zurück. Dagegen endet archive. mit einem Punkt: Path.stem erhält ihn und gibt archive. zurück, während os.path.splitext() den Punkt als Endung behandelt und archive zurückgibt.
Das Aufteilen am ersten Punkt bewirkt etwas anderes: Es schneidet den restlichen Namen ab. Bei my.file.tar.gz ergibt das Aufteilen am ersten Punkt my, während das Entfernen nur der letzten Endung my.file.tar ergibt. Wählen Sie je nachdem, ob Sie eine bekannte zusammengesetzte Endung, nur die letzte Endung oder alles ab dem ersten Punkt entfernen möchten. Beim Aufteilen am ersten Punkt wird .bashrc außerdem zu einer leeren Zeichenkette. Dieses Vorgehen ist daher ungeeignet, wenn Namen mit führendem Punkt erhalten bleiben sollen.
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
from pathlib import Path
for name in ("myfile.tar.gz", "my.file.tar.gz"):
print(Path(name).stem)
print(name.split(".", 1)[0])
myfile.tar
myfile
my.file.tar
my