Python 批量给文件名加前缀后缀:分类标记一步到位
用 Python 批量给文件夹里所有文件统一加前缀或后缀,如「2024Q3_报表.xlsx」「报告_最终版.pdf」,支持只加一次、避免重复添加,附预览。
场景痛点
一个项目的资料散在各个文件夹,想统一打个标记方便检索:报表类加 2024Q3_ 前缀,定稿的文档加 _定稿 后缀。手动一个一个改慢,改重了还不知道。用 Python 批量在文件名前面或后面统一加字,还能判断已经加过的不重复加,避免跑两遍变成 2024Q3_2024Q3_报表.xlsx。
用到的库
纯标准库,无需 pip 安装:
# os、os.path 为标准库
完整代码
import os
# ========== 配置区 ==========
TARGET_DIR = "./报表" # 目标文件夹
PREFIX = "2024Q3_" # 前缀,不需要就留空 ""
SUFFIX = "" # 后缀,不需要就留空 ""
DRY_RUN = True # True=预览,False=真正执行
# ============================
def main():
if not os.path.isdir(TARGET_DIR):
print(f"目录不存在:{TARGET_DIR}")
return
count = 0
for name in os.listdir(TARGET_DIR):
old_path = os.path.join(TARGET_DIR, name)
if not os.path.isfile(old_path):
continue
stem, ext = os.path.splitext(name)
# 已经带过前缀就跳过,避免重复添加
if PREFIX and stem.startswith(PREFIX):
continue
# 已经带过后缀就跳过
if SUFFIX and stem.endswith(SUFFIX):
continue
new_stem = f"{PREFIX}{stem}{SUFFIX}"
new_name = new_stem + ext
new_path = os.path.join(TARGET_DIR, new_name)
if os.path.exists(new_path):
print(f"[跳过] 目标已存在:{new_name}")
continue
print(f"[{'预览' if DRY_RUN else '执行'}] {name} -> {new_name}")
if not DRY_RUN:
os.rename(old_path, new_path)
count += 1
print(f"\n共 {count} 个文件(DRY_RUN={DRY_RUN})")
if __name__ == "__main__":
main()
代码讲解
- 前缀加在主名前,后缀加在主名后、扩展名前:
f"{PREFIX}{stem}{SUFFIX}{ext}"。后缀加在扩展名前面,这样报告.pdf变成报告_定稿.pdf,而不是报告.pdf_定稿。 - 重复添加保护:
startswith和endswith判断这个标记是不是已经在文件名里了。已经有就跳过,脚本可以安全地反复运行,不会叠加。 - PREFIX/SUFFIX 留空即不启用:两个开关独立,只想加前缀就把 SUFFIX 设成
"",反之亦然。 - 扩展名不动:splitext 拆开后只重组主名,扩展名原样保留。
运行结果
终端逐条打印 月度报表.xlsx -> 2024Q3_月度报表.xlsx。预览确认没有重复添加、没有撞名,把 DRY_RUN 改成 False 正式跑一遍即可。
注意事项
- 标记别和已有名字冲突:前缀里的下划线、位置先想清楚,别加完一串乱字符。
- 脚本可重复运行是优点:因为有 startswith/endswith 判断,重复跑不会叠加,但还是建议正式跑前预览。
- 隐藏文件会被一起改:比如
.DS_Store、.gitkeep,不想要就加过滤,跳过以.开头的名字。 - 文件夹不参与:本脚本只处理文件,目录名不动。要处理目录名把
isfile改成isdir。 - 先备份重要文件夹:哪怕有保护措施,正式批量改名前仍建议留底。

更新时间:2026-09-14 21:31:30
上一篇:Python 批量按修改日期归档文件:按月分文件夹整理