查看: 133|回复: 3

Python批量重命名Excel文件:os与xlwings实战代

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式
办公自动化中,经常需要批量修改Excel文件的名称,比如将业务系统导出的“销售表_1月.xlsx”统一改为“营收表_1月.xlsx”。手动操作少量文件还行,但面对几百个文件时,必须靠脚本解决。本文提供一套经过验证的Python方案,核心思路是:遍历文件夹 → 筛选目标文件 → 替换关键词 → 执行重命名。同时兼顾安全性,并扩展至修改工作表名称的场景。

## 1. 批量重命名工作簿:os模块基础版

文件重命名属于文件系统操作,Python内置的os模块即可胜任。以下代码适用于替换文件名中的固定关键词(如把“销售表”换成“营收表”),保留月份、地区等有效信息。
  1. import os
  2. folder_path = r"e:\file"  # 改为实际路径
  3. old_key = "销售表"
  4. new_key = "营收表"           # 若想删除关键词,设为空字符串 ""
  5. for file_name in os.listdir(folder_path):
  6.     # 跳过Excel临时文件(~$开头)
  7.     if file_name.startswith("~$"):
  8.         continue
  9.     # 只处理Excel文件(.xlsx, .xls, .xlsm)
  10.     if not file_name.lower().endswith((".xlsx", ".xls", ".xlsm")):
  11.         continue
  12.     # 文件名必须包含旧关键词
  13.     if old_key not in file_name:
  14.         continue
  15.    
  16.     new_file_name = file_name.replace(old_key, new_key)
  17.     old_path = os.path.join(folder_path, file_name)
  18.     new_path = os.path.join(folder_path, new_file_name)
  19.    
  20.     # 安全措施:先预览,确认无误后取消注释下行
  21.     # os.rename(old_path, new_path)
  22.     print(f"预览:{file_name} -> {new_file_name}")
复制代码

**关键点**:
- 使用`startswith("~$")`过滤Excel打开时产生的临时文件,避免脚本报错。
- 用`endswith`限制文件类型,防止误改PDF、TXT等。
- 首次运行务必进入预览模式,将`os.rename`注释掉,只打印新旧文件名,确认规则正确后再正式执行。
- 批量重命名不可逆,建议先在测试目录运行,或直接复制一份原始文件夹。

## 2. 常见坑点与安全校验

执行前应检查以下几点:
- **文件被占用**:若Excel文件正在打开,`os.rename`会失败。处理前关闭所有相关工作簿。
- **目标文件名冲突**:替换后如果新文件名已存在,会导致异常。可在循环中加入判断:
  1. if os.path.exists(new_path):
  2.     print(f"跳过,目标文件已存在:{new_file_name}")
  3.     continue
复制代码
- **关键词过于宽泛**:例如替换“表”字可能误伤“图标”“表格”等文件。关键词越具体越安全。
- **验证结果**:处理完成后,检查文件数量是否一致(只重命名不减少),随机打开几个Excel确认文件未损坏。保留控制台输出作为日志。

## 3. 进阶:批量修改工作表名称(xlwings)

当需求从“改文件名”变为“改工作表名”时,工具需要切换。`os`只管文件系统,修改Excel内部工作表需要借助`xlwings`(或`openpyxl`)。下面代码遍历文件夹中的所有Excel文件,将每个工作簿中的“Sheet1”统一改为“汇总”。
  1. import os
  2. import xlwings as xw
  3. folder_path = r"e:\file"
  4. old_sheet = "Sheet1"
  5. new_sheet = "汇总"
  6. app = xw.App(visible=False, add_book=False)
  7. try:
  8.     for file_name in os.listdir(folder_path):
  9.         if file_name.startswith("~$") or not file_name.lower().endswith((".xlsx", ".xls", ".xlsm")):
  10.             continue
  11.         full_path = os.path.join(folder_path, file_name)
  12.         wb = app.books.open(full_path)
  13.         sheet_names = [s.name for s in wb.sheets]
  14.         if old_sheet in sheet_names:
  15.             wb.sheets[old_sheet].name = new_sheet
  16.             wb.save()
  17.             print(f"{file_name}:{old_sheet} -> {new_sheet}")
  18.         wb.close()
  19. finally:
  20.     app.quit()
复制代码

**注意**:`xlwings`依赖本地Excel应用程序,需提前安装(`pip install xlwings`)。如果目标工作簿中已存在名为“汇总”的工作表,直接改名会报错,最好先判断新名称是否已被使用。

## 4. 总结:构建自己的批量处理模板

本文展示的是两个最实用的批量文件操作套路:
- 改文件名 → 用`os`;
- 改工作表名 → 用`xlwings`。

核心经验:
1. 先明确处理对象(文件还是文件内部),再选工具。
2. 批量操作必须先筛选(过滤临时文件、非目标类型),不要盲目遍历。
3. 正式执行前务必预览,这是文件操作的安全底线。

将这种“遍历→筛选→修改→验证”的框架记牢,以后无论遇到批量移动、复制还是格式转换,都能快速产出可靠脚本。
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python批量重命名Excel文件:os与xlwings实战代

很好的实战分享!特别欣赏你强调的“预览模式”和“规避临时文件”这两个细节,这确实是批量操作中最容易踩坑的地方。我平时处理类似任务时,还会在 `os.rename` 之前加一步 `shutil.copy2` 备份到临时目录,虽然多占点磁盘空间,但心理上踏实很多。另外想问一下,用 xlwings 处理上百个 Excel 文件时,启动 Excel 实例的开销会不会比较大?有没有考虑过用 openpyxl 替代(无需 Excel 安装)?期待更多这样的办公自动化小技巧!
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python批量重命名Excel文件:os与xlwings实战代

感谢分享这么实用的教程!代码逻辑清晰,尤其是预览模式和临时文件过滤的处理非常贴心,能有效避免误操作。对于我这种经常需要批量整理报表的人来说,这套“遍历→筛选→修改→验证”的框架很有参考价值。 另外想请教一下,如果目标文件夹里同时包含.xlsx和.xls文件,os.rename操作是否对两种格式都完全兼容?还有xlwings部分,如果工作簿中有多个同名工作表(虽然Excel不允许同名,但如果有隐藏的重名或其他bug情况),代码可能会报错,是否有简单的防御性写法?期待看到更多类似的安全细节分享。
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python批量重命名Excel文件:os与xlwings实战代

很实用的分享!预览模式这个细节太关键了,我刚开始学批量处理时就直接运行,结果改错了一堆文件名,后来恢复备份折腾了好久。os.path.exists检查目标文件存在的判断也很有必要,避免意外覆盖。 另外想请教下,如果文件名中的关键词可能出现在不同位置(比如前缀、中间、后缀),用replace是按字符串替换的,会不会出现意外替换?比如想把“表”换成“表格”,结果把“图表”变成了“图表格”。有没有更精确的命名规则写法?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-10 12:57 , Processed in 0.031947 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部