Как получить имя файла без расширения из пути в Python?
Как получить имя файла без расширения из пути в Python?
Имеется строка с путем, например, "/path/to/some/file.txt"
, и нужно извлечь только имя файла без его расширения. Ожидаемый результат: "file"
. Как это реализовать?
5 ответ(ов)
Вы можете создать свое решение следующим образом:
>>> 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
Смотрите ниже другие ответы, которые тоже рассматривают этот вопрос.
Вы можете использовать модуль 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
убирает расширение файла.
В 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.
Как отметил @IceAdor в комментарии к решению @user2902201, rsplit
является самым простым решением, которое хорошо работает с несколькими точками, ограничивая количество разбиений до maxsplit
, равного 1 (с конца строки).
Вот как это выглядит:
file = 'my.report.txt'
print(file.rsplit('.', maxsplit=1)[0])
Результат будет: my.report
Вы можете сохранить путь к файлу и просто удалить расширение, используя метод 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
Таким образом, вы сохраняете путь и удаляете расширение файла.
Есть ли в Python метод подстроки 'contains' для строк?
Объединение двух столбцов текста в DataFrame pandas
Как использовать для поиска файлов рекурсивно?
Как получить имя функции в виде строки?
Вывод строки в текстовый файл