如何获得文件名,而不需要从Python中的path扩展?
如何获得文件名,而不需要从Python中的path扩展?
我find了一个名为os.path.basename
的方法来获取带有扩展名的文件名。 但是即使我inputos时,我也无法称之为path.basename
。 是否有可能直接调用它作为基名?
获取没有扩展名的文件名称:
import os print(os.path.splitext("path_to_file")[0])
至于你的import问题,你这样解决:
from os.path import basename # now you can call it directly with basename print(basename("/a/b/c.txt"))
滚动它:
>>> 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'
>>> print os.path.splitext(os.path.basename("hemanth.txt"))[0] hemanth
如果你想保留文件的path,只需删除扩展名
>>> file = '/root/dir/sub.exten/file.data.1.2.dat' >>> print ('.').join(file.split('.')[:-1]) /root/dir/sub.exten/file.data.1.2
但是即使我inputos时,我也无法称之为path.basename。 是否有可能直接调用它作为基名?
import os
,然后使用os.path.basename
import
os
并不意味着你可以使用os.foo
而不涉及os
。
如果扩展名中有多个点,则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
您只需find基本名称中第一个点的索引,然后切割基本名称即可得到没有扩展名的文件名。
>>> 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
为了完整起见,下面是python 3.2+的pathlib
解决scheme:
from pathlib import Path print(Path(your_path).resolve().stem)
在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
import os path = "a/b/c/abc.txt" print os.path.splitext(os.path.basename(path))[0]
import os
filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv
这将返回没有extension
filename
extension
(C:\ Users \ Public \ Videos \ Sample Videos \ wildlife)
temp = os.path.splitext(filename)[0]
现在你可以从temp获得filename
了
os.path.basename(temp) #this returns just the filename (wildlife)
我们可以做一些简单的split
/ pop
魔术( https://stackoverflow.com/a/424006/1250044 ),以提取文件名(尊重窗口和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
@ IceAdor's在@ user2902201的解决scheme中引用rsplit。 rsplit是支持多个句点的最简单的解决scheme。
这里是拼写出来的:
file = 'my.report.txt' print file.rsplit('.', 1)[0]
我的报告
多重扩展感知程序。 适用于str
和unicode
path。 在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.abcdefg') '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'
为了方便起见,一个简单的函数从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.5testing。
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
解决这个问题的最简单的方法是
import ntpath print('Base name is ',ntpath.basename('/path/to/the/file/'))
这节省了您的时间和计算成本。
如果您知道确切的文件扩展名,例如.txt
,您可以使用:
print fileName[0:-4]