Python 批量重命名文件实战:用 pathlib 安全整理下载文件夹

举报
yd_70403235 发表于 2026/11/03 09:13:31 2026/11/03
【摘要】 下载文件夹越积越乱,文件名带空格、混着中文和日期,手动改名费时又容易出错。本文用 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() 执行改名,配合一道预览和冲突检测,就能把“整理下载文件夹”从体力活变成可重复、可验证的小工具。同样的“预览—检测—执行”思路,也适用于批量转换图片格式、按日期归档日志等场景。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。