Получить имя файла без расширения в Python


91

Если у меня есть имя файла, подобное одному из этих:

1.1.1.1.1.jpg

1.1.jpg

1.jpg

Как я мог получить только имя файла без расширения? Подойдет ли регулярное выражение?


Ответы:


203

В большинстве случаев вам не следует использовать для этого регулярное выражение.

os.path.splitext(filename)[0]

Это также будет .bashrcправильно обрабатывать имя файла , сохраняя полное имя.


4
Не работает должным образом с "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.
Марсело Кантос,


10

Если бы мне пришлось сделать это с помощью регулярного выражения, я бы сделал это так:

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

7

Вы можете использовать метод основы, чтобы получить имя файла.

Вот пример:

from pathlib import Path

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

6

Нет необходимости в регулярном выражении. os.path.splitextтвой друг:

os.path.splitext('1.1.1.jpg')
>>> ('1.1.1', '.jpg')
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.