如何在循环中将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
相关产品推荐
相关产品推荐

