Python批量改名案例,教你如何一键修改文件名
目录导读
- 为什么需要批量修改文件名
- 批量改名的核心逻辑与Python优势
- 基础案例:统一添加前缀/后缀
- 进阶案例:按规则替换文件名中的字符
- 高阶案例:从Excel列表中读取新名称
- 常见问题与解决方案(Q&A)
- 安全执行批量操作的注意事项
- 让重复工作自动化
为什么需要批量修改文件名
在日常工作中,无论是整理照片、管理文档,还是处理项目文件,我们经常遇到需要统一修改文件名的情况,将数百张“IMG_001.jpg”改为“2024年会照片_001.jpg”,或者将“报告-v1.docx”改为“最终报告.docx”,如果手动逐个重命名,不仅耗时且容易出错,Python作为一种高效的编程语言,通过os和shutil模块,可以轻松实现批量文件名修改,将原本需要半小时的工作压缩到几秒钟。

批量改名的核心逻辑与Python优势
批量改名的核心逻辑是:遍历目标文件夹中的每个文件 → 提取原文件名 → 应用转换规则 → 执行重命名,Python的优势在于:
- 跨平台:Windows、macOS、Linux通用。
- 灵活度高:支持正则表达式、条件判断、外部数据导入。
- 安全可控:可先预览再执行,避免误操作。
所有案例均基于内置模块,无需安装第三方库,以下代码建议在副本文件夹中测试。
基础案例:统一添加前缀/后缀
为所有文件添加前缀“会议资料_”
import os
folder_path = r"C:\待处理文件夹" # 修改为实际路径
prefix = "会议资料_"
for filename in os.listdir(folder_path):
full_path = os.path.join(folder_path, filename)
if os.path.isfile(full_path): # 仅处理文件
new_name = prefix + filename
os.rename(full_path, os.path.join(folder_path, new_name))
print(f"已重命名: {filename} → {new_name}")
添加后缀(在扩展名前插入)
import os
folder = r"C:\照片"
suffix = "_高清"
for f in os.listdir(folder):
old = os.path.join(folder, f)
if os.path.isfile(old):
name, ext = os.path.splitext(f)
new_name = name + suffix + ext
os.rename(old, os.path.join(folder, new_name))
进阶案例:按规则替换文件名中的字符
案例:将所有空格替换为下划线
import os
folder = r"C:\文档"
for f in os.listdir(folder):
old = os.path.join(folder, f)
if os.path.isfile(old):
new_f = f.replace(" ", "_") # 替换空格
os.rename(old, os.path.join(folder, new_f))
案例:跳过不需要修改的文件
import os
folder = r"C:\项目文件"
skip_keywords = ["临时", "备份"]
for f in os.listdir(folder):
if any(skip in f for skip in skip_keywords):
continue # 跳过包含“临时”或“备份”的文件
# 此处可继续添加修改逻辑
高阶案例:从Excel列表中读取新名称
当需要将文件改为特定名称(如客户名单对应文件)时,可结合pandas(需安装)实现。
import os
import pandas as pd
# 假设Excel有两列:原文件名、新文件名
df = pd.read_excel(r"C:\重命名列表.xlsx")
folder = r"C:\待处理文件"
for index, row in df.iterrows():
old_name = row["原文件名"]
new_name = row["新文件名"]
old_path = os.path.join(folder, old_name)
new_path = os.path.join(folder, new_name)
if os.path.exists(old_path):
os.rename(old_path, new_path)
print(f"完成: {old_name} → {new_name}")
else:
print(f"未找到: {old_name}")
提示:若不想安装pandas,可使用csv模块处理纯文本表格。
常见问题与解决方案(Q&A)
Q1:如何避免误删文件?
A:重命名前先打印预览,确认无误再执行:
# 预览模式(不实际执行)
for filename in os.listdir(folder):
new_name = "新前缀_" + filename
print(f"将修改: {filename} → {new_name}")
# 确认后移除上面的print,改用os.rename
Q2:文件名包含中文或特殊字符出错怎么办?
A:确保Python文件头部声明编码:
# -*- coding: utf-8 -*-
同时,使用Unicode字符串,如folder = u"C:\我的文件"(Python2)或直接在Python3中使用普通字符串。
Q3:如何处理子文件夹内的文件?
A:使用os.walk()递归遍历所有子目录:
for root, dirs, files in os.walk(folder):
for f in files:
old = os.path.join(root, f)
new = os.path.join(root, "新前缀_" + f)
os.rename(old, new)
Q4:重命名时能否保留文件创建日期?
A:os.rename不会改变文件属性(如创建日期),如需修改,需使用win32file等第三方模块,但建议仅保留系统默认属性。
安全执行批量操作的注意事项
- 永远在副本文件夹测试:正式操作前,复制一份文件到临时目录运行代码,确认结果无误。
- 使用日志记录:添加运行日志,方便回溯:
import logging logging.basicConfig(filename='rename_log.txt', level=logging.INFO) logging.info(f"修改: {old_name} → {new_name}") - 避免修改系统文件:操作前过滤系统隐藏文件(如
desktop.ini)和正在被占用的文件。 - 处理文件名冲突:如果两个文件重名,默认会报错,建议使用
os.path.exists检查:if not os.path.exists(new_path): os.rename(old_path, new_path) else: print(f"跳过冲突: {new_name}")
让重复工作自动化
通过上述Python批量改名案例,你可以轻松应对以下场景:
- 统一添加前缀/后缀(日期、项目名)
- 替换特定字符(空格、标点)
- 从表格导入新名称(客户发票、产品编号)
- 递归处理子文件夹
掌握这些基础后,你还可以组合正则表达式(re模块)实现更复杂的匹配,例如提取文件名中的日期、删除特定模式等,养成“先预览再执行”的习惯,你的文件管理效率将提升10倍。
打开你的Python环境,用代码代替鼠标点击吧!