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

如何解决pandas to_html写入HTML时覆盖内容无法追加新行的问题

问题根因

pandas的DataFrame.to_html()方法默认以写入模式(w)打开目标文件,每次执行都会清空文件原有内容再写入新数据,所以循环处理多个userid时,前一个用户写入的内容会被后一次操作直接覆盖,最终文件里只会保留最后一个处理的用户数据。

解决方法

两种实现路径,按需选择即可:

方案1:全量聚合后一次性写入(优先推荐)

不要在循环中单步写文件,先把所有用户的录音数据统一收集,等全部用户处理完成后,只调用一次to_html()完成写入。这种方式逻辑最简单,生成的HTML格式也最规整,不会出现标签错乱问题。
参考代码逻辑:

# 循环外部初始化空列表,存储所有用户的录音数据
all_record_list = []
s = 0

for userid_c in 你的用户ID遍历列表:
    # 保留你原有的业务逻辑,完成chaptername、all_downloadlinks、created、duration_array等变量的取值
    # ...... 原有业务代码省略 ......
    if get_excel == 'yes':
        # 把当前用户的所有录音记录追加到总数据列表
        for i in range(len(chaptername)):
            all_record_list.append({
                'user_id': userid_c,
                'Recording_name': chaptername[i],
                'Download_link': all_downloadlinks[i],
                'Recording_date_time': created[i],
                'Duration_in_minutes': duration_array[i]
            })
    s += 1

# 所有用户处理完毕后,统一生成DataFrame、转换链接、写入HTML文件
final_df = pd.DataFrame(all_record_list)
final_df["Download_link"] = final_df["Download_link"].apply(lambda x: f"<a href='{x}'>click here</a>")
final_df.to_html('Recordings.html', render_links=True, escape=False)

方案2:循环内追加写入(适配超大数据量场景)

如果待处理的用户量级极大,全量聚合占用内存过高,可以调整文件写入模式为追加模式(a)。注意第一次写入保留完整HTML结构和表头,后续追加时只写入表格数据行,不要重复生成HTML头部、表格头尾标签,避免最终文件格式错乱。
参考代码逻辑:

# 循环外设置标记,识别是否是第一次写入
is_first_write = True
s = 0

for userid_c in 你的用户ID遍历列表:
    # 保留你原有的业务逻辑,完成各变量取值
    # ...... 原有业务代码省略 ......
    if get_excel == 'yes':
        download_file = {'user_id' : userid_c, 'Recording_name' : chaptername, 'Download_link' : all_downloadlinks, 'Recording_date_time' : created, 'Duration_in_minutes' : duration_array}
        df = pd.DataFrame(download_file)
        df["Download_link"] = df["Download_link"].apply(lambda x: f"<a href='{x}'>click here</a>")
        if is_first_write:
            # 第一次写入用默认w模式,生成完整HTML结构
            df.to_html('Recordings.html', render_links=True, escape=False, encoding='utf-8')
            is_first_write = False
        else:
            # 后续写入只提取表格行内容,追加到文件中,跳过表头和HTML框架标签
            with open('Recordings.html', 'a', encoding='utf-8') as f:
                row_content = df.to_html(header=False, escape=False, render_links=True).split('</thead>')[-1].split('</table>')[0]
                f.write(row_content)
    s += 1

# 追加模式写完后,检查文件末尾的</table>等闭合标签是否完整,缺失的话手动补上即可

小提示:如果没有特殊的内存压力,优先选方案1,代码维护成本更低,也不会出现HTML标签缺失导致的页面渲染异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:33:25