17

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

12

Как получить имя файла без расширения из пути в Python?
Имеется строка с путем, например, "/path/to/some/file.txt", и нужно извлечь только имя файла без его расширения. Ожидаемый результат: "file". Как это реализовать?

5 ответ(ов)

7

Вы можете создать свое решение следующим образом:

>>> import os
>>> base = os.path.basename('/root/dir/sub/file.ext')
>>> base
'file.ext'
>>> os.path.splitext(base)
('file', '.ext')
>>> os.path.splitext(base)[0]
'file'

Важно отметить, что если в имени файла несколько точек, будет удалена только последняя. Например:

/root/dir/sub/file.ext.zip -> file.ext

/root/dir/sub/file.ext.tar.gz -> file.ext.tar

Смотрите ниже другие ответы, которые тоже рассматривают этот вопрос.

2

Вы можете использовать модуль os в Python, чтобы получить имя файла без расширения. Вот как это можно сделать:

import os

file_path = "/path/to/file/hemanth.txt"
file_name_without_extension = os.path.splitext(os.path.basename(file_path))[0]
print(file_name_without_extension)

Этот код выведет hemanth, поскольку os.path.basename извлекает имя файла из полного пути, а os.path.splitext убирает расширение файла.

0

В Python 3 модуль pathlib предлагает высокоуровневые объекты путей. Это делает работу с файловыми системами более интуитивно понятной и удобной.

Например, вы можете использовать следующую конструкцию для создания объекта пути:

from pathlib import Path

p = Path("/a/b/c.txt")

С помощью метода with_suffix() можно изменить или удалить расширение файла. В данном случае, при использовании p.with_suffix(''), мы убираем расширение .txt, что вернёт новый путь:

>>> p.with_suffix('')
WindowsPath('/a/b/c')

Также можно получить "основное имя" файла (без пути и расширения) с помощью атрибута stem:

>>> p.stem
'c'

Таким образом, pathlib позволяет легко манипулировать путями и получать необходимые элементы файловой системы в Python.

0

Как отметил @IceAdor в комментарии к решению @user2902201, rsplit является самым простым решением, которое хорошо работает с несколькими точками, ограничивая количество разбиений до maxsplit, равного 1 (с конца строки).

Вот как это выглядит:

file = 'my.report.txt'
print(file.rsplit('.', maxsplit=1)[0])

Результат будет: my.report

0

Вы можете сохранить путь к файлу и просто удалить расширение, используя метод split() для разделения строки по точке, а затем соединить все части обратно без последнего элемента (расширения). Вот пример, как это сделать:

file = '/root/dir/sub.exten/file.data.1.2.dat'
result = '.'.join(file.split('.')[:-1])
print(result)

В этом коде file.split('.') разбивает строку на список по точкам, [:-1] убирает последний элемент (расширение), а '.'.join(...) соединяет оставшиеся части обратно в строку. В результате вы получите:

/root/dir/sub.exten/file.data.1.2

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь