Python 批量重命名文件实战:用 pathlib 安全整理下载文件夹
Python 批量重命名文件实战:用 pathlib 安全整理下载文件夹
背景
整理下载文件夹时常见三类问题:文件名里混着空格,命令行或脚本处理时容易被拆成多段;同类文件散落各处,想按类型归类却无从下手;直接批量改名一旦出错很难撤销。手动一个个改既慢又容易手滑,用脚本处理时最关键的不是“改得多快”,而是“改之前能看清、改错了能发现”。
实现思路
分三步走:扫描、预览、执行。
第一步用 pathlib.Path.iterdir() 扫描目标文件夹,只处理文件、跳过子目录;第二步用正则 re.sub(r"\s+", "_", name) 把连续空白统一替换为下划线,并按扩展名归类,打印成“旧名 -> 新名 [类型]”的预览清单;第三步在真正调用 Path.rename() 之前,先用 collections.Counter 检查新文件名是否有重复,有冲突就停下来人工处理,没有冲突才逐个改名。
核心代码(已在 Python 3.12 本地实测):
from pathlib import Path
import re
from collections import Counter
root = Path("rename_demo")
plan = []
for p in sorted(root.iterdir()):
if not p.is_file():
continue
new_name = re.sub(r"\s+", "_", p.name)
plan.append((p, new_name))
# 冲突检测:改名前必须先做
names = [new for _, new in plan]
dup = [n for n, c in Counter(names).items() if c > 1]
if dup:
print("存在同名冲突,请先人工处理:", dup)
else:
for p, new_name in plan:
p.rename(p.with_name(new_name))
print(f"已重命名 {len(plan)} 个文件")
验证结果
在临时文件夹实测,4 个测试文件(报告 2026.docx、照片 1.jpg、照片 2.jpg、笔记.txt)的预览输出为:
报告 2026.docx -> 报告_2026.docx [docx]
照片 1.jpg -> 照片_1.jpg [jpg]
照片 2.jpg -> 照片_2.jpg [jpg]
笔记.txt -> 笔记.txt [txt]
共 4 个文件
冲突文件名: 无
空格被正确替换、已规范的文件名保持不变、扩展名归类正确、冲突检测返回“无”。脚本只用标准库,不依赖第三方包,在 Windows、macOS 和 Linux 上行为一致。
注意事项
一是先预览后执行:不要把扫描和改名写在同一个循环里一次性跑完,中间加一道人工确认,看到清单再动手。二是改名前做一次备份,或者先在副本文件夹上试跑,确认规则符合预期再处理原件。三是注意大小写不敏感的文件系统(如 Windows)上,“A.jpg”和“a.jpg”改名后可能冲突,冲突检测要按小写后的名字再算一遍。四是不要对系统目录或正在被其他程序打开的文件批量改名,改名失败时脚本会抛异常,记得捕获并记录下来逐个处理。
小结
pathlib 让文件批量操作变得直观:iterdir() 扫描、with_name() 生成新路径、rename() 执行改名,配合一道预览和冲突检测,就能把“整理下载文件夹”从体力活变成可重复、可验证的小工具。同样的“预览—检测—执行”思路,也适用于批量转换图片格式、按日期归档日志等场景。
- 点赞
- 收藏
- 关注作者
评论(0)