如何获得文件名,而不需要从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] 

我的报告

多重扩展感知程序。 适用于strunicodepath。 在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]