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
相关产品推荐
相关产品推荐

