提取PDF表格,Python3,tabula-py

4

尝试使用Python 3.6从PDF中提取表格。看起来[pyPDF2][1]失败了,而[pdfminer][2]不兼容3.x。我找到了一个用于[tabula][3]的Python包装器。

import tabula
file_list = get_pdf_list()

text = tabula.read_pdf(file_list[0])
print(text)

tabula.convert_into(file_list[0], "test.json", ouput_format="json")

Both read_pdf and convert_into都没有返回结果。PyPDF2也遇到了同样的问题。运行时没有出现任何错误。

我开始觉得这可能与我的pdf格式有关。有人有更多经验吗?我试图从pdf中的一个表格中提取一个值。


我在哪里可以获取Python 3.7?或者你是指2.7吗? - Claudio
3.6.. 是我的错误。已进行编辑。 - Tadace
看起来你已经删除了问题文本底部关于你想指定的链接的信息:[pyPDF2][1] ... [pdfminer][2]。如果你愿意,你也可以修复它。 - Claudio
你可以尝试使用Python 3.6的PDFminer/PDFminer-six来实现此功能,具体请参考这里。虽然不是完美的解决方案,但值得一试。 - pyano
你可以尝试使用https://camelot-py.readthedocs.io。 - Vinayak Mehta
@Tadace:在 https://dev59.com/l7Pma4cB1Zd3GeqPurO2#72414309 的答案中尝试使用 SLICEmyPDF。 - 123456
2个回答

1
希望你已经得到了答案!但这里还有我的代码!我想说的是,Tabula是一个很好的PDF表格提取工具。相比之下,Camelot会给我带来很多问题。
安装最新版本的Tabula软件包。
pip install tabula-py

而且代码是!

import os
from tabula import wrapper
os.path.abspath("E:/Documents/myPy/")
tables = wrapper.read_pdf("MyPDF.pdf",multiple_tables=True,pages='all')

i=1
for table in tables:
    table.to_excel('output'+str(i)+'.xlsx',index=False)
    print(i)
    i=i+1

尝试一下这个!

0

提取PDF表格,Python3,tabula-py 使用Tabula-py

from tabula import convert_into
table_file = r"pdf_path"
o1_csv = r"file12.csv"
o2_csv = r"file13.csv"
df = convert_into(table_file, o1_csv, output_format='csv', lattice=False, stream=True, pages=1)
df1 = convert_into(table_file, o2_csv, output_format='csv', lattice=True, stream=False, pages=1)
print(df)
print(df1)
Output: print(df) : None
        print(df1): None

但是 csv 文件不是空的

efile12.csv with stream option true resulted Lattice as true and stream false resulted file13.csv

也许表格没有边界,这与普通文本不同,这就是tabula-py的特点

  1. stream如果为真,则基于文本排列搜索表格的行和列
  2. lattice如果为真,则搜索定义表格的正确边界的行和列

@K J 如果没有人特别使用流或格子方法,那么库就会采用默认值。这对我很有效,也可以帮助其他人。这可能是一个无人问津的问题,但我在工作时搜索了同样的问题,因此一旦我收到了解决方案,就会发布它以帮助其他人。而且那不是应用程序,而是库“Difference”。 - dataninsight
如果不指定是格子还是流式,它会给出相同的结果。@K J。仅仅因为我们从未正确使用过该库的选项,就不能说该库无法工作。重要的是在声明其无法工作之前阅读每个库的文档。 - dataninsight
@K J 这可能是你的信息读取错误,请先阅读评论。 - dataninsight
@KJ提供了图片,这样你就能更好地理解了。 - dataninsight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接