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

for循环写入Excel仅保留最后一行数据,求解决方案

问题分析与解决思路

我来帮你排查下问题——核心原因很简单:你每次循环都会重新创建并覆盖整个Excel文件,所以最后只剩下最后一次循环的数据。不管是第一种xlsxwriter的写法,还是注释掉的pandas to_excel写法,都犯了同一个错误:把文件的创建/打开操作放在了循环内部,导致每次循环都生成新文件,覆盖之前的内容。

下面给你两种靠谱的解决办法,按需选择:

方法一:先收集所有数据,一次性写入(推荐)

这种方式更高效,也符合pandas的使用习惯,适合大多数场景:

import pandas as pd
from pandas import ExcelWriter

if __name__ == "__main__":
    # 先创建空列表,用来存储所有循环生成的字典数据
    all_data = []
    for x in List:
        # 注意这里修正了你代码里的拼写错误:my_dic → my_dict
        my_dict = {
            "ID": x,
            "mail_one": Email,
            "second_mail": second_mail,
            "Num": str(Num),
            "date": Date
        }
        print(my_dict)
        all_data.append(my_dict)
    
    # 所有数据收集完成后,一次性转成DataFrame写入Excel
    df = pd.DataFrame(all_data)
    # 使用with语句可以自动处理文件关闭,更安全
    with ExcelWriter('ID_Num.xlsx') as writer:
        df.to_excel(writer, 'ID_Num', index=False)

方法二:逐行写入(适合超大数据量,不想占用过多内存)

如果你的数据量极大,没办法一次性存到内存里,可以把文件的初始化放在循环外面,循环内只做写入操作:

import xlsxwriter

if __name__ == "__main__":
    # 循环外创建工作簿和工作表,只做一次
    workbook = xlsxwriter.Workbook('ID_Num.xlsx')
    worksheet = workbook.add_worksheet()
    
    # 先写入表头
    headers = ["ID", "mail_one", "second_mail", "Num", "date"]
    for col_idx, header in enumerate(headers):
        worksheet.write(0, col_idx, header)
    
    # 从第2行(索引1)开始写入数据
    current_row = 1
    for x in List:
        # 准备当前行的数据
        row_content = [
            x,
            Email,
            second_mail,
            str(Num),
            Date
        ]
        # 写入整行
        worksheet.write_row(current_row, 0, row_content)
        current_row += 1
    
    # 最后一定要关闭工作簿,不然数据不会写入
    workbook.close()

另外还要提醒你:原代码里有个拼写错误,my_dic = {}应该是my_dict = {},不然会抛出变量未定义的错误,记得修正哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:22:30