第10讲 · 批量重命名文件

批量重命名文件

学会改名语法,再把筛选、预览和冲突检查用于批量操作。

1读取并筛选目标文件
2生成并预演重命名计划
3逐条执行并核对结果

重命名单个文件

l10_single_rename.py
old_path = os.path.join(folder, "A.jpg")
new_path = os.path.join(folder, "photo_1.jpg")
print("执行前:", sorted(os.listdir(folder)))
os.rename(old_path, new_path)
print("执行后:", sorted(os.listdir(folder)))
os.rename(old_path, new_path)
把旧路径对应的文件移动到新路径
old_path
必须指向当前存在的文件
new_path
包含目标文件夹与新文件名
1第1个参数:当前已经存在的旧路径
2第2个参数:改名后使用的新路径
3副作用:目录中的文件名立即改变

读取并排序文件名

l10_sorted_list.py
names = sorted(os.listdir(folder))
print("正在读取:", folder)
print("排序后:", names)
os.listdir(folder)
读取folder直接包含的名称
sorted(os.listdir(folder))
固定批量处理的先后顺序
1listdir参数:要读取的文件夹路径
2listdir返回:文件夹中的名称列表
3sorted返回:按名称排列的新列表

筛选目标图片文件

l10_filter_files.py
for name in sorted(os.listdir(folder)):
    old_path = os.path.join(folder, name)
    if name.endswith(".jpg") and os.path.isfile(old_path):
        print("目标文件:", name)
name.endswith(".jpg")
名称以小写.jpg结尾时返回True
os.path.isfile(old_path)
路径对应普通文件时返回True
条件1 and 条件2
两个判断都为True才选中
1endswith检查名称是否以指定文字结尾
2isfile检查路径是否对应普通文件
3两个条件同时成立才进入重命名计划

生成连续文件名

l10_numbered_names.py
count = 1
for name in sorted(os.listdir(folder)):
    if name.endswith(".jpg"):
        new_name = "photo_" + str(count) + ".jpg"
        print(name, "->", new_name)
        count += 1
count = 1
设置第一个编号
"photo_" + str(count) + ".jpg"
生成新的文件名
count += 1
准备下一个编号
1count从1开始
2str(count)把数字转换为字符串
3只在命中目标文件后增加count

生成重命名计划

l10_preview_plan.py
plan.append((old_path, new_path))
for old_path, new_path in plan:
    print(os.path.basename(old_path), "->", os.path.basename(new_path))
plan.append((old_path, new_path))
把一组路径作为元组加入列表
for old_path, new_path in plan:
逐项读取计划中的两个路径
1每个计划项保存一组old_path和new_path
2先收集全部映射,再统一检查
3生成计划不会修改文件

检查目标文件名冲突

l10_conflict_stop.py
for old_path, new_path in plan:
    if new_path in seen or os.path.exists(new_path):
        conflict = new_path
        break
    seen.add(new_path)
os.path.exists(new_path)
检查目标位置是否已经被占用
new_path in seen
检查计划内部是否重复
if conflict: return
在第一条rename之前停止
1已有目标文件不能被忽略
2计划内部也不能出现重复目标
3发现任何冲突,整批保持原状

预演重命名计划

l10_dry_run_preview.py
print("预览前:", sorted(os.listdir(folder)))
apply_plan([(old_path, new_path)])
print("预览后:", sorted(os.listdir(folder)))
def apply_plan(plan, dry_run=True):
默认启用预演模式
if dry_run is not False: return
没有明确许可就返回
apply_plan(plan, dry_run=False)
明确执行计划
1默认值True表示只显示计划
2预览阶段不调用rename
3明确传入False才进入执行循环

逐条执行批量重命名

l10_step_by_step.py
print("执行前:", sorted(os.listdir(folder)))
for index, (old_path, new_path) in enumerate(plan, 1):
    os.rename(old_path, new_path)
    print("第" + str(index) + "条后:", sorted(os.listdir(folder)))
for old_path, new_path in plan:
按计划顺序取出每组路径
os.rename(old_path, new_path)
每循环一次,立即产生一次文件状态变化

完成图片批量重命名

l10_safe_batch_rename.py
plan = build_plan(folder)
print("执行前:", sorted(os.listdir(folder)))
apply_plan(plan, folder)
apply_plan(plan, folder, dry_run=False)
print("执行后:", sorted(os.listdir(folder)))

复盘批量重命名流程

1rename执行改名:旧路径在前,新路径在后
2join组成路径,listdir读取名称,sorted固定顺序
3endswith与isfile共同筛选目标
4先生成plan并全量查冲突,再用dry_run预演
5执行后重新读取目录,核对每一个新文件名

语法拆解

确认位置
明确当前工作目录与目标文件夹
计划与预检
完整列出旧路径、新路径和冲突
预演、执行、验收
每个阶段都核对真实目录状态
课堂 Python 解释器
点击“逐步运行”后,这里会显示结果。
Python:按执行步骤显示结果。