Python读取多CSV文件写入单个Excel工作表(数据块留空行分隔)
多CSV分块写入同Excel工作表的稳定实现方案
高频报错原因
- 写入流程中反复以追加模式开关ExcelWriter,触发不同pandas、openpyxl版本的引擎兼容报错
- 写入行号偏移计算错误,导致空行缺失、相邻数据块互相覆盖
- 追加模式下未正确指定openpyxl的覆盖写入参数,直接抛出值错误
环境准备
- 安装依赖包:
pip install pandas openpyxl
完整实现代码
import pandas as pd # 自定义配置 csv_paths = ["1.csv", "2.csv"] # 按排版顺序填写CSV文件路径 target_sheet = "汇总数据" output_file = "output.xlsx" # 写入位置游标:第一次从Excel最顶部(第1行,对应程序内0索引行)开始写 write_cursor = 0 # 单次打开写入器完成所有写入,避免多次开关文件触发兼容报错 with pd.ExcelWriter( output_file, engine="openpyxl", mode="w" # 直接新建/覆盖目标Excel,无残留旧数据 ) as writer: for csv_path in csv_paths: # 读取CSV全量内容,保留原始表头 df = pd.read_csv(csv_path) # 把当前CSV内容写入游标指定的位置 df.to_excel( writer, sheet_name=target_sheet, startrow=write_cursor, index=False, # 不写入pandas自带的行索引列 header=True # 保留CSV原表头 ) # 更新游标:当前CSV占用的行数(数据行+表头行) + 1行分隔空行 write_cursor += len(df) + 1 + 1
使用说明
- 按照最终排版的先后顺序,将CSV文件路径填入
csv_paths列表,顺序错误会直接导致最终Excel的排版错乱 - 自动保留每份CSV的原始表头,跳过无意义的pandas行索引列,完全匹配示例的排版要求
- 不同CSV数据块之间自动插入1行空行作为分隔,无需手动调整格式
- 若读取CSV时出现中文编码报错,在
pd.read_csv()方法中补充encoding="gbk"或encoding="utf-8-sig"参数即可解决
方案核心稳定性设计:全程仅在一次文件初始化上下文中完成所有写入操作,无后续追加打开文件的步骤,从根源上规避绝大多数版本兼容类运行报错,在pandas 1.x、2.x全版本均可正常运行。
内容的提问来源于stack exchange,提问作者Rummy
相关产品推荐
相关产品推荐

