如何用Python的camelot库将多页PDF数据提取至单个CSV文件
解决方案:合并PDF多页表格为单个CSV
当然可以实现。你只需要用camelot提取每一页的表格后,将它们转换为pandas的DataFrame,合并成一个完整的数据集,再导出为单个CSV文件即可。
修改后的完整代码
import camelot import pandas as pd def pdf2csv_combined(pdf_filename, csv_filename): # 只提取PDF前3页的表格,指定pages参数 tables = camelot.read_pdf(pdf_filename, pages='1-3') if not tables: print("未找到任何表格") return # 收集所有表格的DataFrame df_list = [] for idx, table in enumerate(tables): df = table.df # 除了第一个表格,后续表格跳过表头行(因为所有表格列名一致) if idx > 0: df = df.iloc[1:] df_list.append(df) # 合并所有DataFrame combined_df = pd.concat(df_list, ignore_index=True) # 导出为单个CSV文件 combined_df.to_csv(csv_filename, index=False, header=True) print(f"所有表格数据已成功合并并导出到 {csv_filename}")
关键步骤说明
- 精准提取目标页:使用
pages='1-3'参数只提取前3页的表格,避免处理第4页的无关内容 - 处理重复表头:因为所有表格列名一致,只保留第一个表格的表头,后续表格跳过第一行表头,只取数据行
- 合并数据集:通过
pd.concat将所有DataFrame合并为一个完整的数据集,ignore_index=True重置行索引,避免索引重复 - 导出CSV:调用
to_csv时设置index=False,避免写入多余的索引列,确保输出的CSV格式干净
注意事项
如果camelot提取表格时的表头识别逻辑和预期不符(比如表头不在第一行),可以调整iloc的切片参数;如果使用flavor='stream'等提取模式,也可以结合camelot的其他参数(如columns)优化表格提取效果。
内容的提问来源于stack exchange,提问作者carlosedb
相关产品推荐
相关产品推荐

