Holen Sie sich Dateinamen ohne Erweiterung in Python

Antworten:

203

In den meisten Fällen sollten Sie dafür keinen regulären Ausdruck verwenden.

os.path.splitext(filename)[0]

Dadurch wird auch ein Dateiname wie .bashrckorrekt behandelt, indem der gesamte Name beibehalten wird.

Marcelo Cantos
quelle
4
Funktioniert nicht richtig mit "git-1.7.8.tar.gz", wo nur die ".gz" entfernt wird. Ich benutze basename[:-len(".tar.gz")]dafür.
blau
28
@blueyed: "Funktioniert nicht richtig" ist eine Frage der Perspektive. Die Datei ist eine gzip-Datei mit dem Basisnamen git-1.7.8.tar. Es gibt keine Möglichkeit, richtig zu erraten, wie viele Punkte der Anrufer entfernen möchte, daher wird splitext()nur der letzte entfernt. Wenn Sie mit Randfällen wie umgehen möchten, .tar.gzmüssen Sie dies von Hand tun. Natürlich können Sie nicht alle Punkte entfernen, da Sie am Ende mit git-1.
Marcelo Cantos
26
>>> import os
>>> os.path.splitext("1.1.1.1.1.jpg")
('1.1.1.1.1', '.jpg')
Lennart Regebro
quelle
10

Wenn ich das mit einem regulären Ausdruck machen müsste, würde ich es so machen:

s = re.sub(r'\.jpg$', '', s)
Alan Moore
quelle
6

Keine Notwendigkeit für Regex. os.path.splitextist dein Freund:

os.path.splitext('1.1.1.jpg')
>>> ('1.1.1', '.jpg')
Triptychon
quelle
5

Sie können die Stammmethode verwenden, um den Dateinamen abzurufen.

Hier ist ein Beispiel:

from pathlib import Path

p = Path(r"\\some_directory\subdirectory\my_file.txt")
print(p.stem)
# my_file
Vlad Bezden
quelle