为何Tabula模板通过Python运行时无法导出PDF数据?
解决Tabula Python导出CSV格式异常的问题
问题原因
- 模板的
extraction_method为guess,但代码中指定了stream=True,提取逻辑冲突,导致输出原始JSON结构而非解析后的表格。 - 直接使用
output_path参数时,Tabula未正确将嵌套提取数据转换为CSV格式,导致文件内容为JSON结构。
解决步骤
1. 修正模板的提取方法
打开DEF.json模板,将extraction_method改为stream,与代码逻辑统一:
[{"page":1,"extraction_method":"stream","x1":27.010627264785583,"x2":212.22643048744183,"y1":107.86715812683106,"y2":152.06638389587403,"width":185.21580322265626,"height":44.19922576904297}]
2. 修改Python代码,手动解析并保存CSV
放弃output_path自动输出,手动提取有效数据并生成标准CSV:
import tabula import pandas as pd # 读取PDF与模板数据 extracted_data = tabula.io.read_pdf_with_template( input_path="C:/Users/dnalaka/Desktop/DEF.2400-20221117.pdf", template_path="C:/Users/dnalaka/Desktop/DEF.json", stream=True ) # 提取有效字段,过滤空值 table_rows = [] for row in extracted_data[0]['data']: # 取每行第1和第3个字段的文本值(跳过中间空字段) table_rows.append([row[0]['text'], row[2]['text']]) # 转换为DataFrame并设置列名 df = pd.DataFrame(table_rows, columns=["项目", "数值"]) # 保存为标准CSV df.to_csv("C:/Users/dnalaka/Desktop/DEF.2400-20221117.csv", index=False)
3. 最终CSV效果
运行代码后,CSV将呈现标准表格格式:
项目,数值 Net. Liq.,39,749,795 Haircut,20,659,245- Excess,19,090,549
内容的提问来源于stack exchange,提问作者Don Nalaka
相关产品推荐
相关产品推荐

