问题:如何从Python路径中获取不带扩展名的文件名?
如何从Python路径中获取不带扩展名的文件名?
回答 0
获取不带扩展名的文件名:
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
如果您需要处理这种情况,请参见下面的其他答案。
回答 1
您可以使用以下方法制作自己的:
>>> 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
回答 3
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth
回答 4
在Python 3.4+中,您可以使用pathlib
解决方案
from pathlib import Path
print(Path(your_path).resolve().stem)
回答 5
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
回答 6
如果您想保留文件的路径,然后删除扩展名
>>> file = '/root/dir/sub.exten/file.data.1.2.dat'
>>> print ('.').join(file.split('.')[:-1])
/root/dir/sub.exten/file.data.1.2
回答 7
如果扩展名中包含多个点,则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
回答 8
@IceAdor引用了@ user2902201解决方案的注释中的rsplit。rsplit是支持多个期间的最简单的解决方案。
在这里说明:
file = 'my.report.txt'
print file.rsplit('.', 1)[0]
我的报告
回答 9
但是即使导入os,也无法将其称为path.basename。是否可以直接将其作为基名来调用?
import os
,然后使用 os.path.basename
import
ing os
并不意味着您os.foo
无需参考即可使用os
。
回答 10
我以为我会使用os.path.splitext的变体不需要使用数组索引的情况的使用进行修改。
该函数始终返回一(root, ext)
对,因此可以安全使用:
root, ext = os.path.splitext(path)
例:
>>> import os
>>> path = 'my_text_file.txt'
>>> root, ext = os.path.splitext(path)
>>> root
'my_text_file'
>>> ext
'.txt'
回答 11
其他方法不会删除多个扩展名。有些文件名也没有扩展名。此代码段同时处理这两个实例,并且在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
回答 12
import os
filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv
这将返回filename
无extension
(C:\用户\公用\视频\样品影片\野生动物)
temp = os.path.splitext(filename)[0]
现在,您可以filename
通过
os.path.basename(temp) #this returns just the filename (wildlife)
回答 13
多扩展识别过程。适用于str
和unicode
路径。适用于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'
回答 14
import os
path = "a/b/c/abc.txt"
print os.path.splitext(os.path.basename(path))[0]
回答 15
在Windows系统上,我也使用drivername前缀,例如:
>>> s = 'c:\\temp\\akarmi.txt'
>>> print(os.path.splitext(s)[0])
c:\temp\akarmi
因此,由于不需要驱动器号或目录名,因此使用:
>>> print(os.path.splitext(os.path.basename(s))[0])
akarmi
回答 16
为了方便起见,一个简单的函数包装了以下两种方法os.path
:
def filename(path):
"""Return file name without extension from path.
See https://docs.python.org/3/library/os.path.html
"""
import os.path
b = os.path.split(path)[1] # path, *filename*
f = os.path.splitext(b)[0] # *file*, ext
#print(path, b, f)
return f
经过Python 3.5测试。
回答 17
解决此问题的最简单方法是
import ntpath
print('Base name is ',ntpath.basename('/path/to/the/file/'))
这样可以节省您的时间和计算成本。
回答 18
非常非常非常简单没有其他模块!
import os
p = r"C:\Users\bilal\Documents\face Recognition python\imgs\northon.jpg"
# Get the filename only from the initial file path.
filename = os.path.basename(p)
# Use splitext() to get filename and extension separately.
(file, ext) = os.path.splitext(filename)
# Print outcome.
print("Filename without extension =", file)
print("Extension =", ext)
回答 19
我们可以做一些简单的split
/ pop
因为在这里看到(魔术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
回答 20
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
回答 21
import os文件名,file_extension = os.path.splitext(’/ d1 / d2 / example.cs’)文件名是’/ d1 / d2 / example’file_extension是’.cs’