Pobierz nazwę pliku bez rozszerzenia w Pythonie


Odpowiedzi:


203

W większości przypadków nie powinieneś do tego używać wyrażenia regularnego.

os.path.splitext(filename)[0]

Spowoduje to również .bashrcpoprawną obsługę nazwy pliku , zachowując całą nazwę.


4
Nie działa poprawnie z „git-1.7.8.tar.gz”, gdzie usuwa tylko „.gz”. Używam basename[:-len(".tar.gz")]do tego.
niebieskawe

28
@blueyed: „Nie działa prawidłowo” to kwestia perspektywy. Plik jest plikiem gzip, którego nazwisko jest podstawa git-1.7.8.tar. Nie ma sposobu, aby poprawnie odgadnąć, ile kropek dzwoniący chce usunąć, więc splitext()usuwa tylko ostatnią. Jeśli chcesz obsługiwać przypadki krawędziowe .tar.gz, musisz to zrobić ręcznie. Oczywiście nie możesz usunąć wszystkich kropek, ponieważ skończysz git-1.
Marcelo Cantos,


10

Gdybym miał to zrobić za pomocą wyrażenia regularnego, zrobiłbym to tak:

s = re.sub(r'\.jpg$', '', s)

7

Możesz użyć metody macierzystej , aby uzyskać nazwę pliku.

Oto przykład:

from pathlib import Path

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

6

Nie ma potrzeby używania wyrażenia regularnego. os.path.splitextjest twoim przyjacielem:

os.path.splitext('1.1.1.jpg')
>>> ('1.1.1', '.jpg')
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.