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

Ответы:

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.
Марсело Кантос,
26
>>> import os
>>> os.path.splitext("1.1.1.1.1.jpg")
('1.1.1.1.1', '.jpg')
Леннарт Регебро
источник
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')
Триптих
источник