在Python中获取不带扩展名的文件名

99
如果我有一个类似下面任一文件名的文件:
1.1.1.1.1.jpg

1.1.jpg

1.jpg

我该如何仅获取文件名而不包含扩展名?使用正则表达式是否合适?


这个回答解决了你的问题吗?如何在Python中从路径中获取没有扩展名的文件名? - Seanny123
6个回答

224

在大多数情况下,您不应该使用正则表达式来处理这个问题。

os.path.splitext(filename)[0]

这也将正确处理像.bashrc这样的文件名,保持整个名称。


4
无法正常与“git-1.7.8.tar.gz”一起使用,只能删除“.gz”。我使用basename[:-len(".tar.gz")]来实现此操作。 - blueyed
29
“无法正常工作”是一个相对而言的问题。该文件确实是一个gzip文件,其基本名称为“git-1.7.8.tar”。无法正确猜测调用者想要剥离多少个点号,因此“splitext()”只会剥离最后一个。如果您想处理像“.tar.gz”这样的边缘情况,您需要手动处理。显然,您不能剥离所有的点号,否则就会得到“git-1”这样的结果。 - Marcelo Cantos

27
>>> import os
>>> os.path.splitext("1.1.1.1.1.jpg")
('1.1.1.1.1', '.jpg')

17
您可以使用 stem 方法获取文件名。
以下是示例:
from pathlib import Path

p = Path(r"\\some_directory\subdirectory\my_file.txt")
print(p.stem)
# my_file

10

如果我必须使用正则表达式来完成这个任务,我会这样做:

s = re.sub(r'\.jpg$', '', s)

6
不需要用正则表达式。 os.path.splitext 是您的好帮手:
os.path.splitext('1.1.1.jpg')
>>> ('1.1.1', '.jpg')

0

还可以使用字符串切片。

>>> "1.1.1.1.1.jpg"[:-len(".jpg")]
'1.1.1.1.1'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接