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

解决循环保存多组件DataFrame至S3同Excel不同工作表仅存最后表的问题

问题修复方案

你的代码之所以只保留COMP3的工作表,是因为循环里每次都会生成全新的Excel文件并覆盖S3中的旧文件。每轮循环都创建一个仅含当前组件工作表的Excel,上传后直接替换之前的版本,最后自然只剩最后一次循环的结果。

修复思路

把Excel文件的初始化、所有工作表的写入操作放在循环外部,一次性完成所有工作表的添加后,再将完整的Excel文件上传到S3,避免多次覆盖。

修复后的代码

import datetime
import io
import pandas as pd
import boto3

today = datetime.datetime.now().strftime('%m_%d_%Y_%H_%M_%S')
components = ["COMP1", "COMP2", "COMP3"]
filename = 'auto_export_' + today

# 先初始化BytesIO和ExcelWriter,所有工作表都写入同一个工作簿
with io.BytesIO() as output:
    with pd.ExcelWriter(output, engine='xlsxwriter') as writer:
        for comp in components:
            df1 = df[df['component'] == comp]
            print(comp)
            print(df1)
            # 如果你的append_df_to_excel是自定义方法,直接替换成这个方法即可
            df1.to_excel(writer, sheet_name=comp, index=False)
        # 所有工作表写入完成后,获取完整的文件内容
        data = output.getvalue()

# 仅执行一次S3上传,避免覆盖
s3 = boto3.resource('s3')
s3.Bucket('mybucket').put_object(Key='folder1/' + filename + '.xlsx', Body=data)

关键说明

  • 核心是让所有组件的工作表都写入同一个pd.ExcelWriter实例,而不是每次循环新建。
  • 如果你使用的append_df_to_excel是自定义的追加工具(比如用来处理重复表头),直接把代码里的to_excel替换成这个方法就行,逻辑不变。
  • 最后只做一次S3上传操作,彻底避免文件被多次覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:50:23