You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:35:28