我刚刚发现了从pdf中提取表格的tabula-py (当然还有tabula-java )的joy。我现在正在为我的工作编写一个脚本,从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})
我之所以使用编码参数,是因为标准的utf-8返回一个错误,而流方法则是因为它在tabula.exe中显示了一个很好的提取表。但是,数据帧有一个问题,因为前两列(在tabula.exe预览中正确地显示为两个不同的列)实际上是一个单独的列,因此名称和值混合在一起。
你知道为什么相同的区域在tabula-py和tabula.exe中会产生两种不同的结果吗?非常感谢!
发布于 2017-11-18 09:40:50
在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})
发布于 2021-04-27 07:37:14
如果其他人为在哪里描绘表格和列而苦苦挣扎,您可以很容易地使用Adobe Acrobat找到准确的尺寸。在Adobe Acrobat中打开pdf,打开标尺,并将其设置为点。放大,你可以看到精确的点测量来拆分区域/表。
https://stackoverflow.com/questions/47357172
复制相似问题