Python 如何获取不带扩展名的文件名?
os.path.splitext 分离扩展名取 [0],配合 os.path.basename 先去目录;pathlib 的 Path.stem 最简洁。本文给出两种方案与多重扩展名(.tar.gz)的处理。
最简洁:pathlib.Path('/a/b/report.txt').stem → 'report';传统写法:os.path.splitext(os.path.basename(path))[0]。
pathlib(推荐)
from pathlib import Path
p = Path('/home/user/archive.tar.gz')
p.stem # 'archive.tar'(只去掉最后一个后缀)
p.name # 'archive.tar.gz'(完整文件名)
p.suffix # '.gz'
p.suffixes # ['.tar', '.gz']
os.path 写法
import os
path = '/home/user/report.txt'
os.path.splitext(os.path.basename(path))[0] # 'report'
两步:basename 去目录,splitext 去扩展名。
多重扩展名的坑
archive.tar.gz 的 stem 是 archive.tar——只去最后一个。要全去掉:
name = p.name
for _ in p.suffixes:
name = os.path.splitext(name)[0] # 或直接 name.split('.')[0]
常见问题(FAQ)
Q:没有扩展名的文件呢? stem 返回完整文件名,splitext 返回原样——安全。
Q:隐藏文件如 .gitignore? pathlib 视其无后缀(stem 为 '.gitignore'),符合直觉。