合并多个CSV到Excel工作簿仅保留最后一个工作表,求解决方法
问题分析与解决
你的问题核心是每次调用df.to_excel()都会覆盖整个Excel文件,而非在已有工作簿中新增工作表。另外代码里的外层for i循环完全冗余,且变量名dir和Python内置函数dir()重名,可能引发潜在问题。
修正后的代码示例
用pd.ExcelWriter统一管理工作簿,循环写入所有CSV对应的工作表:
import os import pandas as pd # 建议将变量名dir改为dir_path,避免与内置函数冲突 dir_path = "你的CSV文件夹路径" # 用with语句管理ExcelWriter,自动处理文件的打开与保存 with pd.ExcelWriter("output.xlsx", engine="openpyxl") as writer: for filee in os.listdir(dir_path): if filee.endswith(".csv"): file_path = os.path.join(dir_path, filee) df = pd.read_csv(file_path, on_bad_lines='skip') # 可选:去掉文件名的.csv后缀作为工作表名,更简洁 sheet_name = filee.replace(".csv", "") df.to_excel(writer, sheet_name=sheet_name, index=False)
关键说明
with语句会自动完成ExcelWriter的初始化与资源释放,无需手动调用writer.save(),能避免因文件未正确关闭导致的报错。- 指定
engine="openpyxl"是因为xlsx格式依赖该引擎支持多工作表写入,若之前用ExcelWriter报错,大概率是未安装该库,执行pip install openpyxl即可解决。 - 若想保留原文件名(含
.csv后缀)作为工作表名,直接用sheet_name=filee即可。 - 原代码中多余的外层循环和
i变量已删除,无实际作用。
内容的提问来源于stack exchange,提问作者osama Abd-Elmohsen
相关产品推荐
相关产品推荐

