如何用Python重命名目录中的.xlsx文件,而非生成新文件?
解决Python重命名目录中.xlsx文件的问题
你之前的代码通过Pandas读写Excel文件生成新文件,这不是真正的重命名操作——不仅效率低,还可能丢失原文件的格式(比如公式、单元格样式)。下面给出两种直接在文件系统层面重命名的方案,无需硬编码原文件名:
方案一:使用os模块(兼容所有Python版本)
仅处理目标目录下的.xlsx文件
如果只需要重命名C:\Test目录下(不包含子目录)的.xlsx文件:
import os # 用原始字符串避免路径转义问题 target_folder = r"C:\Test" for filename in os.listdir(target_folder): # 判断是否为xlsx文件(小写后缀兼容可能的大写情况) if filename.lower().endswith(".xlsx"): # 构造原文件和新文件的完整路径 old_file_path = os.path.join(target_folder, filename) new_file_path = os.path.join(target_folder, "Master.xlsx") # 避免覆盖已存在的Master.xlsx if not os.path.exists(new_file_path): os.rename(old_file_path, new_file_path) print(f"已将 {filename} 重命名为 Master.xlsx") else: print(f"Master.xlsx 已存在,跳过 {filename}") # 如果只需要重命名一个文件,执行后退出循环 break
处理所有子目录中的.xlsx文件
如果需要遍历C:\Test下的所有子目录,将每个子目录中的.xlsx文件重命名为Master.xlsx:
import os root_folder = r"C:\Test" for root, _, files in os.walk(root_folder): for filename in files: if filename.lower().endswith(".xlsx"): old_file_path = os.path.join(root, filename) new_file_path = os.path.join(root, "Master.xlsx") if not os.path.exists(new_file_path): os.rename(old_file_path, new_file_path) print(f"已在 {root} 目录下将 {filename} 重命名为 Master.xlsx") else: print(f"{root} 目录下已存在 Master.xlsx,跳过 {filename}") # 每个目录只处理一个xlsx文件,避免重复覆盖 break
方案二:使用pathlib模块(Python3.4+推荐,语法更简洁)
pathlib是Python3.4引入的面向对象路径操作模块,代码可读性更高:
仅处理目标目录下的.xlsx文件
from pathlib import Path target_folder = Path(r"C:\Test") # 查找当前目录下所有xlsx文件 for xlsx_file in target_folder.glob("*.xlsx"): new_file = target_folder / "Master.xlsx" if not new_file.exists(): xlsx_file.rename(new_file) print(f"已将 {xlsx_file.name} 重命名为 Master.xlsx") else: print(f"Master.xlsx 已存在,跳过 {xlsx_file.name}") break
处理所有子目录中的.xlsx文件
from pathlib import Path root_folder = Path(r"C:\Test") # 递归查找所有子目录下的xlsx文件 for xlsx_file in root_folder.rglob("*.xlsx"): new_file = xlsx_file.parent / "Master.xlsx" if not new_file.exists(): xlsx_file.rename(new_file) print(f"已在 {xlsx_file.parent} 目录下将 {xlsx_file.name} 重命名为 Master.xlsx") else: print(f"{xlsx_file.parent} 目录下已存在 Master.xlsx,跳过 {xlsx_file.name}") break
注意事项
- 路径转义:Windows路径中的
\需要用原始字符串r"C:\Test"或者双反斜杠"C:\\Test",避免被解析为转义字符。 - 多文件冲突:如果目录下有多个.xlsx文件,多次重命名会覆盖
Master.xlsx,代码中加入了存在性判断避免意外覆盖,也可以通过break只处理第一个xlsx文件。 - 文件系统操作:直接使用
os.rename或pathlib.Path.rename是文件系统层面的操作,速度快且保留原文件的所有格式和属性,远优于Pandas读写的方式。
内容的提问来源于stack exchange,提问作者QuickSilver42
相关产品推荐
相关产品推荐

