Как получить имя файла без расширения из пути в Python? - PullRequest
766 голосов
/ 24 марта 2009

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

Ответы [ 21 ]

1072 голосов
/ 24 марта 2009

Получение имени файла без расширения:

import os
print(os.path.splitext("/path/to/some/file.txt")[0])

Печать:

/path/to/some/file

Если имя файла имеет несколько точек, удаляется только расширение после последней. Например:

import os
print(os.path.splitext("/path/to/some/file.txt.zip.asc")[0])

Печать:

/path/to/some/file.txt.zip
394 голосов
/ 24 марта 2009

Просто сверните его:

>>> 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'
188 голосов
/ 04 августа 2009
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth
100 голосов
/ 26 ноября 2017

Версия для чтения, использующая Pathlib в Python 3.4 +

from pathlib import Path

Path('/root/dir/sub/file.ext').stem

Напечатает:

файл

43 голосов
/ 24 августа 2017

Для полноты картины вот решение pathlib для python 3.2 +:

from pathlib import Path

print(Path(your_path).resolve().stem)
24 голосов
/ 21 октября 2013

Если вы хотите сохранить путь к файлу и просто удалить расширение

>>> file = '/root/dir/sub.exten/file.data.1.2.dat'
>>> print ('.').join(file.split('.')[:-1])
/root/dir/sub.exten/file.data.1.2
20 голосов
/ 11 июня 2016

os.path.splitext () не будет работать , если в расширении несколько точек.

Например, images.tar.gz

>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> print os.path.splitext(file_name)[0]
images.tar

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

>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> index_of_dot = file_name.index('.')
>>> file_name_without_extension = file_name[:index_of_dot]
>>> print file_name_without_extension
images
18 голосов
/ 23 июля 2018

https://docs.python.org/3/library/os.path.html

В python 3 pathlib «Модуль pathlib предлагает высокоуровневые объекты пути». итак,

>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> print(p.with_suffix(''))
\a\b\c
>>> print(p.stem)
c
12 голосов
/ 24 марта 2009

Но даже когда я импортирую os, я не могу назвать его path.basename. Можно ли назвать его так же, как и базовое имя?

import os, а затем используйте os.path.basename

import ing os не означает, что вы можете использовать os.foo без ссылки на os.

11 голосов
/ 23 мая 2017

@ IceAdor ссылается на rsplit в комментарии к решению @ user2902201. rsplit - самое простое решение, которое поддерживает несколько периодов.

Здесь прописано:

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

my.report

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...