首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python去除文件基名中的扩展名

如何使用python去除文件基名中的扩展名
EN

Stack Overflow用户
提问于 2013-04-06 18:01:32
回答 4查看 19.2K关注 0票数 12

我已经在如下列表中获得了文件的完整路径:

代码语言:javascript
复制
a = ['home/robert/Documents/Workspace/datafile.xlsx', 'home/robert/Documents/Workspace/datafile2.xls', 'home/robert/Documents/Workspace/datafile3.xlsx']

我想要的是只获取不带扩展名的文件名,例如:

代码语言:javascript
复制
b = ['datafile', 'datafile2', 'datafile3']

我试过的是:

代码语言:javascript
复制
xfn = re.compile(r'(\.xls)+')
for name in a:
    fp, fb = os.path.split(fp)
    ofn = xfn.sub('', name)
    b.append(ofn)

但它的结果是:

代码语言:javascript
复制
b = ['datafilex', 'datafile2', 'datafile3x']
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-06 18:06:55

  1. 您使用的正则表达式是错误的。(\.xls)+匹配.xls.xls.xls等形式的字符串。这就是为什么在.xlsx项中还有剩余的x。你想要的是正则表达式,即一个后跟零个或多个characters.
  2. You的\.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.pathbasename’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.)

票数 27
EN

Stack Overflow用户

发布于 2013-04-06 18:10:17

线条:

代码语言:javascript
复制
>>> filename = 'file.ext'
>>> '.'.join(filename.split('.')[:-1]) if '.' in filename else filename
'file'
票数 4
EN

Stack Overflow用户

发布于 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对象。所以,

代码语言:javascript
复制
>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> print(p.with_suffix(''))
\a\b\c
>>> print(p.stem)
c
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15849521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档