我刚刚发现了tabula-py(当然是tabula-java)从pdf中提取表格的乐趣。我现在为我的工作编写一个脚本,从pdf表中读取一些数据,稍微清理它并将其导出到excel中。我使用的pdf每天都有相同的格式,表格总是在某个区域。要检测该区域,我正在使用tabula.exe:我选择表格,可视化预览(看起来不错),然后导出脚本,以便查看tabula.exe使用的-a参数。然后我在Python的命令中使用它,即:
df = tabula.read_pdf(os.fsdecode(directory)+filename, encoding = 'ISO-8859-1',
stream=True, area = "81.106,302.475,384.697,552.491", pages = 2, pandas_options={'header':None})
我正在使用encoding参数,因为标准的utf-8会返回错误,而stream方法也是如此,因为它是在tabula.exe中显示一个很好的提取表的那个。但是,数据框有问题,因为前两列(在tabula.exe的预览中正确显示为2个不同的列)实际上是一列,因此名称和值混合在一起。
您是否知道为什么同一区域在tabula-py和tabula.exe中产生2个不同的结果?非常感谢你!
答案 0 :(得分:2)
在GitHub上计算出来:tabula-py默认情况下将“guess”选项设置为True。因此,为了纠正差异,您可以添加guess = False,输出将是相同的!
df = tabula.read_pdf(os.fsdecode(directory)+filename, encoding = 'ISO-8859-1',
stream=True, area = "81.106,302.475,384.697,552.491", pages = 2, guess = False, pandas_options={'header':None})
答案 1 :(得分:0)
如果其他人在描绘表格和列的位置时遇到困难,您可以使用 Adobe Acrobat 轻松找到准确的尺寸。在 Adobe Acrobat 中打开 pdf,打开标尺,并将其设置为点。放大一点,您可以看到精确的点测量值来分割区域/表格。