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

Python批量重排多Excel列顺序时仅最后一个文件生效问题求助

现有代码问题定位

  • 存在语法错误:列名选择列表中'LastName'后多了一个多余的单引号,会直接触发Python语法异常,脚本根本无法完整跑完所有文件的遍历流程。
  • 若你实际运行的版本缩进出错,把df = pd.read_excel()、列重排、to_csv保存的代码块放到了for循环外部,会导致内存里的变量被每次循环覆盖,最终只有最后一次循环的文件数据被执行保存操作,这就是你遇到仅最后一个文件生效的核心原因。
  • 额外风险:如果原Excel文件缺少Id/Title/FirstName/LastName任意一个列名,会直接抛出KeyError中断整个批量流程。

修正后可用代码

所有读取、重排、保存逻辑都放在循环内部执行,补充容错避免单个文件异常中断整体流程:

import pandas as pd
from pathlib import Path

folder = Path(r"C:\Users\Documents\Extracted")
# 匹配目录下所有xlsx文件
for file_name in folder.glob('*.xlsx'):
    # 跳过Excel打开时生成的临时锁文件
    if file_name.name.startswith('~'):
        continue
    try:
        # 读取当前遍历到的Excel文件
        df = pd.read_excel(file_name)
        # 按指定顺序重排列,自动过滤原文件不存在的列,避免报错
        target_cols = [col for col in ['Id', 'Title', 'FirstName', 'LastName'] if col in df.columns]
        new_df = df[target_cols]
        # 保存为同文件名的csv,加utf-8-sig避免Windows下打开中文乱码
        new_df.to_csv(file_name.with_suffix('.csv'), index=False, encoding='utf-8-sig')
        print(f"文件{file_name.name}处理完成")
    except Exception as e:
        print(f"文件{file_name.name}处理失败,错误信息:{str(e)}")

可选调整说明

  • 若需要直接覆盖原Excel文件完成列重排,可将保存语句替换为new_df.to_excel(file_name, index=False, engine='openpyxl'),需提前安装openpyxl依赖库。
  • 原代码中导入的os、glob模块未实际使用,可直接删除精简代码。

内容的提问来源于stack exchange,提问作者ChKYu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 15:15:10