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
相关产品推荐
相关产品推荐

