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,
26
>>> import os
>>> os.path.splitext("1.1.1.1.1.jpg")
('1.1.1.1.1', '.jpg')
Odpowiedzi:
W większości przypadków nie powinieneś do tego używać wyrażenia regularnego.
os.path.splitext(filename)[0]
Spowoduje to również
.bashrc
poprawną obsługę nazwy pliku , zachowując całą nazwę.źródło
basename[:-len(".tar.gz")]
do tego.git-1.7.8.tar
. Nie ma sposobu, aby poprawnie odgadnąć, ile kropek dzwoniący chce usunąć, więcsplitext()
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ńczyszgit-1
.>>> import os >>> os.path.splitext("1.1.1.1.1.jpg") ('1.1.1.1.1', '.jpg')
źródło
Gdybym miał to zrobić za pomocą wyrażenia regularnego, zrobiłbym to tak:
s = re.sub(r'\.jpg$', '', s)
źródło
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
źródło
Nie ma potrzeby używania wyrażenia regularnego.
os.path.splitext
jest twoim przyjacielem:os.path.splitext('1.1.1.jpg') >>> ('1.1.1', '.jpg')
źródło