Как получить имя файла без расширения из пути в Python?
996
Получение имени файла без расширения:
import os
print(os.path.splitext("/path/to/some/file.txt")[0])
Печать:
/path/to/some/file
Документация дляos.path.splitext
.
Важное примечание: если имя файла содержит несколько точек, удаляется только расширение после последней. Например:
import os
print(os.path.splitext("/path/to/some/file.txt.zip.asc")[0])
Печать:
/path/to/some/file.txt.zip
Смотрите другие ответы ниже, если вам нужно разобраться с этим делом.
splitext('kitty.jpg.zip')
дает('kitty.jpg', '.zip')
).splitext(basename('/some/path/to/file.txt'))[0]
(что я всегда делаю)Вы можете сделать свой собственный с:
Важное примечание: если
.
в имени файла содержится более одного, удаляется только последнее. Например:Ниже приведены другие ответы, которые касаются этого.
источник
os
.Использование
pathlib
в Python 3.4+вернусь
источник
os.path
решения, это удалит только одно расширение (илиsuffix
, какpathlib
его называют).Path('a.b.c').stem == 'a.b'
Path(Path('a.b.c').stem).stem
.with_suffix('')
- это путь. Вы, вероятно , хотите , чтобы петли доp.suffix == ''
.источник
`
для показа кода и "/somepath/hermanth.txt" в качестве экземпляра пути.os.path.basename
нет необходимости.os.path.basename
должен использоваться только для получения имени файла из пути к файлу.В Python 3.4+ вы можете использовать
pathlib
решениеисточник
resolve()
путь? Действительно ли возможно получить путь к файлу, и если имя файла не будет частью пути без этого? Это означает, что если вы дадите путь к символической ссылке, вы вернете имя файла (без расширения) файла, на который указывает символическая ссылка.resolve()
- помочь справиться с проблемой множественных точек. Ответ ниже об использовании индекса не будет работать, если путь «./foo.tar.gz»https://docs.python.org/3/library/os.path.html
В python 3 pathlib «Модуль pathlib предлагает высокоуровневые объекты пути». так,
источник
Если вы хотите сохранить путь к файлу и просто удалить расширение
источник
'/root/dir/sub.exten/file.data.1.2.dat'.rsplit('.', 1)
os.path.splitext () не будет работать, если в расширении несколько точек.
Например, images.tar.gz
Вы можете просто найти индекс первой точки в базовом имени, а затем нарезать базовое имя, чтобы получить только имя файла без расширения.
источник
.tar.gz
.tar.bz
.tar.7z
'haystack'.index('needle')
генерируется исключение ValueError, если стрелка (в приведенном выше случае точка.
) не найдена в стоге сена. Файлы без каких-либо расширений тоже существуют.@ IceAdor's ссылается на rsplit в комментарии к решению @ user2902201. rsplit - самое простое решение, которое поддерживает несколько периодов.
Здесь это прописано:
мой отчет
источник
import os
, а затем использоватьos.path.basename
import
INGos
не означает, что вы можете использоватьos.foo
без ссылки наos
.источник
from os import foo
.os
модуля, если у него есть членfoo
.path
илиwalk
).Думаю, я бы добавил вариант использования os.path.splitext без необходимости индексирования массива.
Функция всегда возвращает
(root, ext)
пару, поэтому ее можно безопасно использовать:root, ext = os.path.splitext(path)
Пример:
источник
Другие методы не удаляют несколько расширений. У некоторых также есть проблемы с именами файлов, которые не имеют расширений. Этот фрагмент имеет дело с обоими экземплярами и работает как в Python 2, так и в 3. Он извлекает базовое имя из пути, разбивает значение на точки и возвращает первое, которое является начальной частью имени файла.
Вот несколько примеров для запуска:
В каждом случае напечатанное значение:
источник
Path('/path/to/file.txt').stem
. (1,23 мкс против 8,39 мкс)import os
Это возвращает
filename
безextension
(C: \ Users \ Public \ Videos \ Sample Videos \ wildlife)Теперь вы можете получить только
filename
из темп систочник
Процедура многократного расширения. Работает
str
иunicode
дорожки. Работает в Python 2 и 3.Поведение:
источник
источник
В системе Windows я также использовал префикс drivername, например:
Так как мне не нужна буква диска или имя каталога, я использую:
источник
Для удобства используется простая функция, заключающая в себе два метода
os.path
:Протестировано с Python 3.5.
источник
самый простой способ решить это
Это экономит ваше время и стоимость вычислений.
источник
Очень очень очень просто нет других модулей!
источник
Мы могли бы сделать что-нибудь простое
split
/pop
волшебное, как показано здесь ( https://stackoverflow.com/a/424006/1250044 ), чтобы извлечь имя файла (с учетом различий между окнами и POSIX).источник
источник
импортировать имя файла, file_extension = os.path.splitext ('/ d1 / d2 / example.cs') имя файла равно '/ d1 / d2 / example' file_extension равно '.cs'
источник