You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中优雅获取含多圆点文件名(去除真实后缀)的方法

嗨,这个场景我在实际开发中碰到过好多次,给你分享几个优雅的Python实现方案:

方法1:用os.path.splitext()(最省心,适合单段后缀)

Python内置的os.path模块里的splitext()函数专门干这个事儿——它会把文件名/路径拆成(root, ext)两个部分,其中ext是从最后一个圆点开始的后缀。对你的例子abc.def.gh.bz2来说,直接取root就是你要的结果。

代码示例:

import os

filename = "abc.def.gh.bz2"
root, ext = os.path.splitext(filename)
print(root)  # 输出: abc.def.gh

这个方法的好处是跨平台,哪怕你传入的是完整路径(比如/home/user/docs/abc.def.gh.bz2),它也能正确处理路径分隔符,返回带路径的前缀部分。

方法2:用pathlib(Python3.4+,更现代的面向对象写法)

如果你用的是Python3.4及以上版本,推荐试试pathlib库——它把路径变成了对象,用法更直观优雅。其中stem属性刚好对应去掉最后一个后缀后的文件名部分。

代码示例:

from pathlib import Path

file_path = Path("abc.def.gh.bz2")
print(file_path.stem)  # 输出: abc.def.gh

同样,它也支持完整路径,比如Path("/home/user/abc.def.gh.bz2").stem会返回abc.def.gh,非常省心。

方法3:手动截取(灵活处理多段后缀,比如.tar.gz)

如果你的真实后缀是多段的(比如文件是abc.def.gh.tar.gz,要得到abc.def.gh),那就可以先判断文件名是否以目标后缀结尾,再截取前面的部分:

代码示例:

filename = "abc.def.gh.tar.gz"
target_suffix = ".tar.gz"

if filename.endswith(target_suffix):
    root = filename[:-len(target_suffix)]
    print(root)  # 输出: abc.def.gh
else:
    print("文件不符合指定的后缀格式")

这种方式自由度很高,不管后缀是几段,只要你明确目标后缀,就能精准截取。

总结一下:如果是单段后缀(比如你的bz2场景),优先用os.path.splitext()或者pathlib.Path.stem,都是内置方案,优雅又靠谱;如果是多段后缀,就用手动判断截取的方式。

内容的提问来源于stack exchange,提问作者Choix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:09:23