Как получить имя файла без расширения из пути в Python?
Получение имени файла без расширения:
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
Смотрите другие ответы ниже, если вам нужно разобраться с этим случаем.
Вы можете сделать свой собственный с:
>>> 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
Другие ответы на этот вопрос смотрите ниже.
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth
Используя pathlib
в Python 3.4+
from pathlib import Path
Path('/root/dir/sub/file.ext').stem
вернется
file
В Python 3.4+ вы можете использовать pathlib
решение
from pathlib import Path
print(Path(your_path).resolve().stem)
Если вы хотите сохранить путь к файлу и просто удалить расширение
>>> file = '/root/dir/sub.exten/file.data.1.2.dat'
>>> print ('.').join(file.split('.')[:-1])
/root/dir/sub.exten/file.data.1.2
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
ОС.путь.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
Но даже когда я импортирую os, я не могу вызвать path.basename. Можно ли вызвать его непосредственно как basename?
импортировать os
, а затем использовать os.path.basename
.
Импортирование os
не означает, что вы можете использовать os.foo
без ссылки на os
.
Думал, я бы бросить в одном из вариантов использования ОС.путь.splitext без необходимости использовать массив указателей.
Функция всегда возвращает (корень, ВН)
пара, так что это безопасно для использования:
корня, ВН = ОС.путь.splitext(путь)`
Пример:
>>> import os
>>> path = 'my_text_file.txt'
>>> root, ext = os.path.splitext(path)
>>> root
'my_text_file'
>>> ext
'.txt'
импорт ОС
filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv
Это возвращает имя_файла
без расширение
(C:\Users\Public\Videos\Sample видео\дикой природы)
temp = os.path.splitext(filename)[0]
Теперь вы можете получить только имя_файла
от температуры с
os.path.basename(temp) #this returns just the filename (wildlife)
Несколько процедур в курсе расширения. Работает на ул
и Юникод
пути. Работает в Python 2 и 3.
import os
def file_base_name(file_name):
if '.' in file_name:
separator_index = file_name.index('.')
base_name = file_name[:separator_index]
return base_name
else:
return file_name
def path_base_name(path):
file_name = os.path.basename(path)
return file_base_name(file_name)
Поведение:
>>> path_base_name('file')
'file'
>>> path_base_name(u'file')
u'file'
>>> path_base_name('file.txt')
'file'
>>> path_base_name(u'file.txt')
u'file'
>>> path_base_name('file.tar.gz')
'file'
>>> path_base_name('file.a.b.c.d.e.f.g')
'file'
>>> path_base_name('relative/path/file.ext')
'file'
>>> path_base_name('/absolute/path/file.ext')
'file'
>>> path_base_name('Relative\\Windows\\Path\\file.txt')
'file'
>>> path_base_name('C:\\Absolute\\Windows\\Path\\file.txt')
'file'
>>> path_base_name('/path with spaces/file.ext')
'file'
>>> path_base_name('C:\\Windows Path With Spaces\\file.txt')
'file'
>>> path_base_name('some/path/file name with spaces.tar.gz.zip.rar.7z')
'file name with spaces'
Других методов Дон'т удалить несколько расширений. Некоторые из них также имеют проблемы с именами файлов, что Дон'т иметь расширения. Этот фрагмент касается обоих экземплярах и работает в Python 2 и 3. Она захватывает базовое имя из пути, разбивает на точки значение, и возвращает первый из них, который является начальной частью имени файла.
import os
def get_filename_without_extension(file_path):
file_basename = os.path.basename(file_path)
filename_without_extension = file_basename.split('.')[0]
return filename_without_extension
Здесь'ы набор примеров для запуска:
example_paths = [
"FileName",
"./FileName",
"../../FileName",
"FileName.txt",
"./FileName.txt.zip.asc",
"/path/to/some/FileName",
"/path/to/some/FileName.txt",
"/path/to/some/FileName.txt.zip.asc"
]
for example_path in example_paths:
print(get_filename_without_extension(example_path))
В каждом случае напечатанные значения:
FileName
import os
path = "a/b/c/abc.txt"
print os.path.splitext(os.path.basename(path))[0]
На системе Windows я использовал префикс имя_драйвера так же, как:
>>> s = 'c:\\temp\\akarmi.txt'
>>> print(os.path.splitext(s)[0])
c:\temp\akarmi
Так что мне не нужно имя диска или каталога, я использую:
>>> print(os.path.splitext(os.path.basename(s))[0])
akarmi
Мы могли бы сделать некоторые простые сплит
/ поп
магия, как видно здесь (https://stackoverflow.com/a/424006/1250044), чтобы извлечь именем (соблюдая Windows и различия в POSIX).
def getFileNameWithoutExtension(path):
return path.split('\\').pop().split('/').pop().rsplit('.', 1)[0]
getFileNameWithoutExtension('/path/to/file-0.0.1.ext')
# => file-0.0.1
getFileNameWithoutExtension('\\path\\to\\file-0.0.1.ext')
# => file-0.0.1
самый простой способ решить это
import ntpath
print('Base name is ',ntpath.basename('/path/to/the/file/'))
это экономит время и стоимость вычислений.
импорт ОС именем, file_extension = ОС.путь.splitext('/Д1/Д2/пример.компания CS') имя '/Д1/Д2/пример' file_extension это '.компания CS'
import os
list = []
def getFileName( path ):
for file in os.listdir(path):
#print file
try:
base=os.path.basename(file)
splitbase=os.path.splitext(base)
ext = os.path.splitext(base)[1]
if(ext):
list.append(base)
else:
newpath = path+"/"+file
#print path
getFileName(newpath)
except:
pass
return list
getFileName("/home/weexcel-java3/Desktop/backup")
print list