Python自动化:一键搞定“文件批量重命名”

在日常办公或整理资料时,你是否遇到过这样的崩溃时刻:

​

  • 下载了几百张素材图片,名字全是乱码(如 ad3f12.jpg),想改成有序的 img_001.jpg?
  • 要把项目文件夹里几十个文件的"副本"字样全部删掉?
  • 想给所有备份文件加上今天的日期后缀?

核心工具与准备

不需要安装任何第三方库,我们使用Python自带的 os 模块即可完成操作。

核心函数

  • os.listdir(path): 获取指定目录下的所有文件名。
  • os.rename(src, dst): 将文件从 src(原路径)重命名为 dst(新路径)。
  • os.path.join(path, name): 智能拼接路径,兼容Windows和Mac系统。

💡 场景一:按顺序批量编号(整理照片/素材)

需求: 将乱七八糟的文件名统一修改为 前缀_序号.扩展名 的格式,例如 Photo_001.jpg。

适用场景: 摄影师整理照片、深度学习数据集预处理、壁纸库整理。

📜 代码实现

Python

复制代码

javascript

体验AI代码助手

代码解读

复制代码

import os def batch_rename_sequence(folder_path, prefix="File", start_index=1): # 1. 获取文件夹内所有文件 try: files = os.listdir(folder_path) except FileNotFoundError: print("❌ 找不到文件夹,请检查路径!") return # 2. 循环处理每一个文件 # enumerate生成带索引的序列,i从0开始,所以需要+start_index for i, filename in enumerate(files): # 排除隐藏文件(如Mac下的.DS_Store) if filename.startswith('.'): continue # 获取文件后缀名 (例如 .jpg) file_ext = os.path.splitext(filename)[1] # 3. 构建新名字 # :03d 表示数字补零对齐,例如 1 -> 001, 12 -> 012 new_name = f"{prefix}_{start_index + i:03d}{file_ext}" # 4. 拼接完整路径 old_path = os.path.join(folder_path, filename) new_path = os.path.join(folder_path, new_name) # 5. 执行重命名 os.rename(old_path, new_path) print(f"✅ [重命名成功]: {filename} -> {new_name}") # --- 使用示例 --- # 请将路径替换为你实际的文件夹路径 target_folder = r"C:\Users\Admin\Pictures\Travel" batch_rename_sequence(target_folder, prefix="Travel_Japan", start_index=1)


场景二:关键词替换与清洗(办公文档处理)

需求: 删除文件名中多余的字符(如" - 副本"),或者将文件名中的空格替换为下划线。

适用场景: 处理从网盘批量下载的文件、整理同事发来的命名不规范的文档。

代码实现

Python

复制代码

javascript

体验AI代码助手

代码解读

复制代码

import os def batch_replace_keyword(folder_path, target_word, replace_word=""): files = os.listdir(folder_path) count = 0 for filename in files: # 如果文件名中包含目标关键词 if target_word in filename: # 1. 生成新文件名 (字符串替换) new_name = filename.replace(target_word, replace_word) # 2. 拼接路径 old_path = os.path.join(folder_path, filename) new_path = os.path.join(folder_path, new_name) # 3. 避免文件名冲突 (如果新名字已经存在,则跳过) if os.path.exists(new_path): print(f"⚠️ [跳过] 目标文件已存在: {new_name}") continue os.rename(old_path, new_path) print(f"🔨 [清洗完成]: {filename} -> {new_name}") count += 1 print(f"🎉 总计处理了 {count} 个文件。") # --- 使用示例 --- # 场景:把 " - 副本" 删掉,相当于替换为空字符串 work_dir = r"D:\Work\Reports\2024" batch_replace_keyword(work_dir, target_word=" - 副本", replace_word="")


场景三:修改文件扩展名(格式转换后处理)

需求: 批量将所有的 .txt 文件后缀修改为 .md(Markdown格式),或者将 .jpeg 统一为 .jpg。

适用场景: 代码工程迁移、特定软件格式兼容、日志文件处理。

代码实现

Python

复制代码

javascript

体验AI代码助手

代码解读

复制代码

import os def batch_change_extension(folder_path, old_ext, new_ext): # 确保扩展名带点,例如 .txt if not old_ext.startswith('.'): old_ext = '.' + old_ext if not new_ext.startswith('.'): new_ext = '.' + new_ext files = os.listdir(folder_path) for filename in files: # 检查是否以旧后缀结尾 if filename.endswith(old_ext): # 1. 分离文件名和后缀 base_name = os.path.splitext(filename)[0] # 2. 组合新名字 new_name = base_name + new_ext # 3. 执行重命名 os.rename( os.path.join(folder_path, filename), os.path.join(folder_path, new_name) ) print(f"🔄 [格式转换]: {filename} -> {new_name}") # --- 使用示例 --- # 场景:将文件夹内所有 .htm 文件改为 .html web_dir = r"/var/www/html/project" batch_change_extension(web_dir, ".htm", ".html")


🛡️ 最佳实践:如何防止"一键火葬场"?

批量重命名一旦出错,恢复起来非常麻烦(除非你有备份)。强烈建议在执行 os.rename 之前,先增加一个 "演习模式"(Dry Run)。

给代码加上"安全锁"

我们可以封装一个更通用的函数,增加一个 dry_run 参数:

Python

复制代码

javascript

体验AI代码助手

代码解读

复制代码

import os def safe_rename(folder_path, dry_run=True): files = os.listdir(folder_path) print(f"🔍 当前模式: {'演习模式 (不实际修改)' if dry_run else '实战模式 (谨慎操作)'}") print("-" * 40) for i, filename in enumerate(files): if filename.startswith('.'): continue # 假设逻辑是:加前缀 "2025_" new_name = f"2025_{filename}" if dry_run: # 演习模式:只打印,不执行 print(f"👁️ [预览] {filename} ---> {new_name}") else: # 实战模式:真正动手 old_p = os.path.join(folder_path, filename) new_p = os.path.join(folder_path, new_name) os.rename(old_p, new_p) print(f"✅ [已修改] {filename} ---> {new_name}") # --- 使用建议 --- # 第一步:先设为 True,运行看打印结果是否符合预期 safe_rename(r"D:\TestFiles", dry_run=True) # 第二步:确认无误后,改为 False 再次运行 # safe_rename(r"D:\TestFiles", dry_run=False)

相关推荐
外收内放6 小时前
面向对象高级(实战案例)
开发语言·python·学习
专业程序开发源6 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
FPGA小迷弟6 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
卷无止境6 小时前
面向arm64桌面客户端开发全景:语言、框架与生态
后端·python
fanruitian7 小时前
python else用法
开发语言·python
Thinker QAQ7 小时前
并发编程(十一):Shared Memory 与 Message Passing——关系与组合使用
java·python·go·并发编程·shared memory·message passing
用户8356290780517 小时前
如何使用 Python 对 Excel 数据进行分组和分级显示
后端·python
vx_Biye_Design7 小时前
django房屋租赁推荐系统78455-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·express
学Linux的语莫9 小时前
python中类的常见写法
开发语言·python·状态模式
垆边人似月.10 小时前
Python中如何使用get函数实现频次查询
服务器·前端·python