文件路径添加字符:用Path.name结合正则是否最优?求方案
最优实现:给文件名添加
_new后缀的方案 问得好!其实完全不需要通过Path(path).name提取文件名后结合正则处理——Python的pathlib模块已经提供了更简洁、可靠的原生方案,既直观又不易出错。
最优方案:利用pathlib的stem和suffix属性
pathlib是Python 3.4+内置的路径处理模块,它的Path对象自带两个非常实用的属性:
stem:不带后缀的文件名(比如test.csv的stem是test)suffix:文件的后缀(比如test.csv的suffix是.csv)
我们只需要把这两部分和_new拼接,再结合原路径的父目录,就能轻松生成目标路径:
from pathlib import Path # 原路径 original_path = Path(r"C:\Users\user\Documents\test.csv") # 生成新路径:父目录 / 原文件名_stem + _new + 原后缀 new_path = original_path.parent / f"{original_path.stem}_new{original_path.suffix}" print(new_path) # 输出结果:C:\Users\user\Documents\test_new.csv
为什么这个方案比正则更好?
- 无需手动处理路径细节:
pathlib会自动适配Windows的\和类Unix的/路径分隔符,不用自己拼接字符串容易出错 - 处理复杂文件名更可靠:如果文件名包含多个点(比如
data.v1.2.csv),stem会正确提取data.v1.2,生成data.v1.2_new.csv,而正则如果写得不好可能会误匹配中间的点 - 代码简洁可读性高:直接调用原生属性,逻辑一目了然,比写正则表达式更容易维护
对比:如果用正则会怎么样?
如果非要用正则,你可能需要先提取文件名,再用正则替换,但步骤繁琐且容易出问题:
import re from pathlib import Path original_path = Path(r"C:\Users\user\Documents\test.csv") filename = original_path.name # 正则替换:在后缀前插入_new new_filename = re.sub(r"(?=\.[^.]+$)", "_new", filename) new_path = original_path.parent / new_filename
这个方法不仅代码更长,还需要考虑文件名中包含多个点的情况,正则表达式需要写得很精确才能避免错误,远不如pathlib的原生方案高效。
内容的提问来源于stack exchange,提问作者user14253628
相关产品推荐
相关产品推荐

