Python怎么批量修改文件名以添加标识备注

键盘旁的猫
键盘旁的猫
发布时间:2026-10-21| 4人浏览过
原创

在日常数据整理、素材归档或项目交付中,我们经常需要对成批的文件添加状态备注或分类标签,例如在发票后面标注“_已报销”、在设计图末尾加上“_初审通过”或者在文档前面统一加上项目代号。借助 Python 标准库中的 pathlib 模块,只需十行左右的代码,就能快速、安全地完成成百上千个文件的精准重命名,同时避免误伤文件扩展名或引起路径冲突。

一、批量重命名核心逻辑与处理流程

许多初学者直接使用简单的字符串切片或旧式 os.rename 操作,容易因误截断扩展名导致文件格式无法被操作系统识别。在现代 Python 编程中,推荐统一使用面向对象的 pathlib 库。处理批量添加备注的标准过程可以分为四个清晰阶段:扫描文件、解构名称、组装备注、执行安全更新。

Python怎么批量修改文件名以添加标识备注
图 1:批量修改文件名并追加备注的标准执行流程

二、理解文件名解构:保护扩展名

为文件添加备注时,通常有两种常见位置需求:

  • 尾部插入备注(最常用):将标识放在原文件名之后、扩展名之前,例如将 财务报表.xlsx 修改为 财务报表_已审核.xlsx。如果直接拼接字符串得到 财务报表.xlsx_已审核,文件就会失去关联的默认打开软件。
  • 头部添加前缀:将标识放在整个文件名的最前方,例如 [归档]_财务报表.xlsx。
Python怎么批量修改文件名以添加标识备注
图 2:通过 pathlib.Path 结构化属性精准保留扩展名

三、典型场景与实战代码

1. 基础场景:批量在文件名后添加固定文本备注

假设在目标文件夹 D:/work_files 下有一批文件,需要统一在名字后加上 _已核对。下面是完整的基础脚本:

from pathlib import Path

# 目标文件夹路径
target_dir = Path("D:/work_files")
# 要追加的备注标识
tag = "_已核对"

# 遍历目录中所有常规文件
for file in target_dir.iterdir():
    # 只处理普通文件,跳过子文件夹
    if not file.is_file():
        continue
    
    # 防重复判断:如果文件名已经包含该标识,则跳过
    if tag in file.stem:
        continue
        
    # 组装新的文件名:原主文件名 + 备注 + 原扩展名
    new_name = f"{file.stem}{tag}{file.suffix}"
    new_path = file.with_name(new_name)
    
    # 执行重命名
    file.rename(new_path)
    print(f"重命名完成: {file.name} -> {new_name}")

注意:上述代码中加入的 tag in file.stem 校验非常关键,这保证了代码是幂等的。即使你不小心重复运行脚本,它也不会把同一个文件变成 报表_已核对_已核对_已核对.xlsx。

2. 场景拓展:批量在文件名前添加项目编号前缀

若需要向前添加前缀(如 [2024Q3]_),则直接对 file.name 或 file.stem 拼接即可:

from pathlib import Path

target_dir = Path("D:/project_docs")
prefix = "[2024Q3]_"

for file in target_dir.iterdir():
    if file.is_file() and not file.name.startswith(prefix):
        new_name = f"{prefix}{file.name}"
        file.rename(file.with_name(new_name))
        print(f"已添加前缀: {new_name}")

3. 进阶场景:根据文件修改日期动态添加时间标识

除了固定文字外,许多场景需要根据文件自身的修改时间,自动将日期作为备注打在文件名末尾。可以结合 datetime 模块从文件元数据中提取时间:

from pathlib import Path
from datetime import datetime

target_dir = Path("D:/logs")

for file in target_dir.glob("*.log"):
    # 获取文件最后修改时间戳
    mtime = file.stat().st_mtime
    date_str = datetime.fromtimestamp(mtime).strftime("%Y%m%d")
    tag = f"_{date_str}"
    
    # 避免重复追加当天日期
    if not file.stem.endswith(tag):
        new_name = f"{file.stem}{tag}{file.suffix}"
        file.rename(file.with_name(new_name))
        print(f"动态日期标注: {file.name} -> {new_name}")

四、关键防错:演练预览模式(Dry Run)

在批量处理大量文件或重要业务文档时,直接执行重命名是极具风险的操作——一旦正则或拼接逻辑写错,几千个文件名被改乱后很难立刻撤回。因此,正规的工程做法是先引入 dry_run 开关进行“无害演练”。

Python怎么批量修改文件名以添加标识备注
图 3:先预览、后写入的双阶段执行防护

演练模式的核心思路是利用一个布尔变量控制是否真正调用 rename() 方法。当 dry_run = True 时只输出打印信息,供人工核查;确认无误后再将参数改为 False 执行真实变更:

def safe_batch_rename(folder_path, tag, dry_run=True):
    path = Path(folder_path)
    count = 0
    
    for file in path.iterdir():
        if not file.is_file() or tag in file.stem:
            continue
            
        new_path = file.with_name(f"{file.stem}{tag}{file.suffix}")
        
        # 冲突检测:避免重命名覆盖已有同名文件
        if new_path.exists():
            print(f"[跳过] 目标已存在同名文件: {new_path.name}")
            continue
            
        if dry_run:
            print(f"[演练预览] {file.name} -> {new_path.name}")
        else:
            file.rename(new_path)
            print(f"[已修改] {file.name} -> {new_path.name}")
        count += 1
        
    action = "演练预计处理" if dry_run else "实际修改完成"
    print(f"\n统计:{action} {count} 个文件。")

# 首次执行:开启演练
safe_batch_rename("D:/reports", "_2024Q4", dry_run=True)

# 核对输出正常后,再正式执行:
# safe_batch_rename("D:/reports", "_2024Q4", dry_run=False)

五、常见问题与注意事项

常见问题 触发原因 解决方案与规范
PermissionError 文件正被其他程序占用(例如 Excel 正开着该表格),或对目标目录缺乏写权限。 关闭正在使用对应文件的应用;或者使用 try...except PermissionError 捕获异常并记录未成功的文件列表。
FileExistsError 新生成的文件名在目录下已经存在,直接 rename 会在某些操作系统上报错或强行覆盖原有文件。 重命名前调用 new_path.exists() 显式判断。如果已存在,应跳过或增加序号标识。
多重扩展名处理 对于形如 archive.tar.gz 的文件,pathlib.Path.suffix 只识别 .gz。 对于此类特殊双扩展名,应使用 file.suffixes 获取列表,或统一采用正则/指定字符串分割。
递归处理子目录 如果想要包含所有子文件夹里的文件,iterdir() 仅扫描单层。 改用 path.rglob("*") 遍历即可递归遍历所有子文件夹。

六、选择与决策导图

为了在具体业务中快速匹配最适合的重命名策略,可以参照下方的方案对照图:

Python怎么批量修改文件名以添加标识备注
图 4:三种常用文件名备注添加方案总结

七、总结

使用 Python 批量修改文件名并添加标识备注的核心在于:

  1. 优先使用 pathlib.Path,通过 stem 与 suffix 严格保护扩展名。
  2. 在字符串拼接前后,加入幂等性判定(检查备注是否已存在),防止二次执行破坏文件名。
  3. 正式批量操作前务必运行演练预览模式(dry_run),确认映射结果符合预期后再批量执行。
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。