我刚刚发现了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中显示漂亮的提取表的方法。但是,数据框存在问题,因为前2列(在tabula.exe的预览中正确显示为2个不同的列)实际上是一个单独的列,因此名称和值混合在一起。

您是否知道为什么同一区域在tabula-py和tabula.exe中会产生2个不同的结果?非常感谢你!

最佳答案

在GitHub上找到了答案:tabula-py默认情况下在True上设置了“guess”选项。因此,要纠正差异,您只需添加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})

关于python - Tabula-py没有将列拆分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47357172/

10-09 21:14