Не работает должным образом с "git-1.7.8.tar.gz", где удаляет только ".gz". Пользуюсь basename[:-len(".tar.gz")]для этого.
blueyed
28
@blueyed: «Не работает должным образом» - это вопрос перспективы. Файл представляет собой файл gzip, его базовое имя git-1.7.8.tar. Невозможно правильно угадать, сколько точек звонящий хочет удалить, поэтому splitext()удаляет только последнюю. Если вы хотите справиться с крайними случаями, например .tar.gz, вам придется делать это вручную. Очевидно, вы не можете убрать все точки, так как в итоге вы получите git-1.
Марсело Кантос,
26
>>> import os
>>> os.path.splitext("1.1.1.1.1.jpg")
('1.1.1.1.1', '.jpg')
Ответы:
В большинстве случаев вам не следует использовать для этого регулярное выражение.
os.path.splitext(filename)[0]
Это также будет
.bashrc
правильно обрабатывать имя файла , сохраняя полное имя.источник
basename[:-len(".tar.gz")]
для этого.git-1.7.8.tar
. Невозможно правильно угадать, сколько точек звонящий хочет удалить, поэтомуsplitext()
удаляет только последнюю. Если вы хотите справиться с крайними случаями, например.tar.gz
, вам придется делать это вручную. Очевидно, вы не можете убрать все точки, так как в итоге вы получитеgit-1
.>>> import os >>> os.path.splitext("1.1.1.1.1.jpg") ('1.1.1.1.1', '.jpg')
источник
Если бы мне пришлось сделать это с помощью регулярного выражения, я бы сделал это так:
s = re.sub(r'\.jpg$', '', s)
источник
Вы можете использовать метод основы, чтобы получить имя файла.
Вот пример:
from pathlib import Path p = Path(r"\\some_directory\subdirectory\my_file.txt") print(p.stem) # my_file
источник
Нет необходимости в регулярном выражении.
os.path.splitext
твой друг:os.path.splitext('1.1.1.jpg') >>> ('1.1.1', '.jpg')
источник