办公自动化中,经常需要批量修改Excel文件的名称,比如将业务系统导出的“销售表_1月.xlsx”统一改为“营收表_1月.xlsx”。手动操作少量文件还行,但面对几百个文件时,必须靠脚本解决。本文提供一套经过验证的Python方案,核心思路是:遍历文件夹 → 筛选目标文件 → 替换关键词 → 执行重命名。同时兼顾安全性,并扩展至修改工作表名称的场景。
## 1. 批量重命名工作簿:os模块基础版
文件重命名属于文件系统操作,Python内置的os模块即可胜任。以下代码适用于替换文件名中的固定关键词(如把“销售表”换成“营收表”),保留月份、地区等有效信息。
- import os
- folder_path = r"e:\file" # 改为实际路径
- old_key = "销售表"
- new_key = "营收表" # 若想删除关键词,设为空字符串 ""
- for file_name in os.listdir(folder_path):
- # 跳过Excel临时文件(~$开头)
- if file_name.startswith("~$"):
- continue
- # 只处理Excel文件(.xlsx, .xls, .xlsm)
- if not file_name.lower().endswith((".xlsx", ".xls", ".xlsm")):
- continue
- # 文件名必须包含旧关键词
- if old_key not in file_name:
- continue
-
- new_file_name = file_name.replace(old_key, new_key)
- old_path = os.path.join(folder_path, file_name)
- new_path = os.path.join(folder_path, new_file_name)
-
- # 安全措施:先预览,确认无误后取消注释下行
- # os.rename(old_path, new_path)
- print(f"预览:{file_name} -> {new_file_name}")
复制代码
**关键点**:
- 使用`startswith("~$")`过滤Excel打开时产生的临时文件,避免脚本报错。
- 用`endswith`限制文件类型,防止误改PDF、TXT等。
- 首次运行务必进入预览模式,将`os.rename`注释掉,只打印新旧文件名,确认规则正确后再正式执行。
- 批量重命名不可逆,建议先在测试目录运行,或直接复制一份原始文件夹。
## 2. 常见坑点与安全校验
执行前应检查以下几点:
- **文件被占用**:若Excel文件正在打开,`os.rename`会失败。处理前关闭所有相关工作簿。
- **目标文件名冲突**:替换后如果新文件名已存在,会导致异常。可在循环中加入判断:- if os.path.exists(new_path):
- print(f"跳过,目标文件已存在:{new_file_name}")
- continue
复制代码 - **关键词过于宽泛**:例如替换“表”字可能误伤“图标”“表格”等文件。关键词越具体越安全。
- **验证结果**:处理完成后,检查文件数量是否一致(只重命名不减少),随机打开几个Excel确认文件未损坏。保留控制台输出作为日志。
## 3. 进阶:批量修改工作表名称(xlwings)
当需求从“改文件名”变为“改工作表名”时,工具需要切换。`os`只管文件系统,修改Excel内部工作表需要借助`xlwings`(或`openpyxl`)。下面代码遍历文件夹中的所有Excel文件,将每个工作簿中的“Sheet1”统一改为“汇总”。
- import os
- import xlwings as xw
- folder_path = r"e:\file"
- old_sheet = "Sheet1"
- new_sheet = "汇总"
- app = xw.App(visible=False, add_book=False)
- try:
- for file_name in os.listdir(folder_path):
- if file_name.startswith("~$") or not file_name.lower().endswith((".xlsx", ".xls", ".xlsm")):
- continue
- full_path = os.path.join(folder_path, file_name)
- wb = app.books.open(full_path)
- sheet_names = [s.name for s in wb.sheets]
- if old_sheet in sheet_names:
- wb.sheets[old_sheet].name = new_sheet
- wb.save()
- print(f"{file_name}:{old_sheet} -> {new_sheet}")
- wb.close()
- finally:
- app.quit()
复制代码
**注意**:`xlwings`依赖本地Excel应用程序,需提前安装(`pip install xlwings`)。如果目标工作簿中已存在名为“汇总”的工作表,直接改名会报错,最好先判断新名称是否已被使用。
## 4. 总结:构建自己的批量处理模板
本文展示的是两个最实用的批量文件操作套路:
- 改文件名 → 用`os`;
- 改工作表名 → 用`xlwings`。
核心经验:
1. 先明确处理对象(文件还是文件内部),再选工具。
2. 批量操作必须先筛选(过滤临时文件、非目标类型),不要盲目遍历。
3. 正式执行前务必预览,这是文件操作的安全底线。
将这种“遍历→筛选→修改→验证”的框架记牢,以后无论遇到批量移动、复制还是格式转换,都能快速产出可靠脚本。 |