我已经在如下列表中获得了文件的完整路径:
a = ['home/robert/Documents/Workspace/datafile.xlsx', 'home/robert/Documents/Workspace/datafile2.xls', 'home/robert/Documents/Workspace/datafile3.xlsx']我想要的是只获取不带扩展名的文件名,例如:
b = ['datafile', 'datafile2', 'datafile3']我试过的是:
xfn = re.compile(r'(\.xls)+')
for name in a:
fp, fb = os.path.split(fp)
ofn = xfn.sub('', name)
b.append(ofn)但它的结果是:
b = ['datafilex', 'datafile2', 'datafile3x']发布于 2013-04-06 18:06:55
(\.xls)+匹配.xls、.xls.xls等形式的字符串。这就是为什么在.xlsx项中还有剩余的x。你想要的是正则表达式,即一个后跟零个或多个characters.\.xls.*实际上不需要使用正则表达式。在os.path中有专门的方法来处理这个问题: os.path.basename('home/robert/Documents/Workspace/datafile.xlsx')和os.path.splitext(os.path.basename('home/robert/Documents/Workspace/datafile.xlsx')) os.path‘basename’os.path >>> datafile.xlsx‘>>> datafile’因此,假设您并不真正关心.xls/.xlsx后缀,那么您的代码可以像下面这样简单:
A= 'home/robert/Documents/Workspace/datafile.xlsx','home/robert/Documents/Workspace/datafile2.xls','home/robert/Documents/Workspace/datafile3.xlsx‘>>> os.path.splitext(os.path.basename( fn ))[0]
(还要注意list comprehension.)
发布于 2013-04-06 18:10:17
线条:
>>> filename = 'file.ext'
>>> '.'.join(filename.split('.')[:-1]) if '.' in filename else filename
'file'发布于 2018-07-23 17:25:02
这是How to get the filename without the extension from a path in Python?的重复
https://docs.python.org/3/library/os.path.html
在python3pathlib中,pathlib模块提供了高级path对象。所以,
>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> print(p.with_suffix(''))
\a\b\c
>>> print(p.stem)
chttps://stackoverflow.com/questions/15849521
复制相似问题