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

如何在循环中将Pandas DataFrame转CSV时为各表添加空行?

DataFrame转CSV:表格间加空行且末尾无多余换行的解决方案

to_csv追加模式的实际行为

  • 当设置mode='a'时,to_csv会把CSV内容追加到文件末尾,不会覆盖原有内容。
  • 默认情况下,to_csv会自动在写入内容的最后添加一个换行符(由line_terminator参数控制,默认是\n),确保每次写入的内容以换行结尾。
  • 你之前的代码同时用两个句柄打开同一个文件(with open的f和to_csv内部打开的文件),这种操作容易出现写入顺序混乱,而且每次循环后手动写\n,导致最后一个表格末尾多了个多余的换行。

靠谱的代码解决方案

方案一:判断迭代位置,只在表格间加空行

通过枚举表格的索引,只在非最后一个表格写完后加空行,同时统一用一个文件句柄写入,避免多句柄问题:

import tabula

# 读取PDF里的所有表格
df_list = tabula.read_pdf("out.pdf", pages='all')

# 打开文件准备写入
with open('out.csv', 'w') as f:
    for idx, df in enumerate(df_list):
        # 写入当前表格的CSV内容
        df.to_csv(f, sep=',', index=False)
        # 不是最后一个表格的话,加一个空行
        if idx != len(df_list) - 1:
            f.write('\n')

方案二:先写第一个表格,后续表格前加空行

这种写法逻辑更直观,先处理第一个表格,之后的每个表格写入前先加一个空行:

import tabula

df_list = tabula.read_pdf("out.pdf", pages='all')

with open('out.csv', 'w') as f:
    if df_list:
        # 写入第一个表格
        df_list[0].to_csv(f, sep=',', index=False)
        # 处理剩下的表格,每个前加空行
        for df in df_list[1:]:
            f.write('\n')
            df.to_csv(f, sep=',', index=False)

为什么这两个方案能解决问题?

  • 都只用一个文件句柄写入所有内容,避免了多句柄导致的指针不同步问题。
  • 两种写法都确保只有表格之间会加一个空行,文件末尾不会出现多余的换行符,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:55:54