1

如果 pdf 文件中只有一个表,则可以使用代码简单地提取该表

from tabula import read_pdf
df = read_pdf(r"C:\Users\Himanshu Poddar\Desktop\pdf_file.pdf")

但是,如果 pdf 文件中存在多个表。我无法提取这些表。因为它只提取第一个表。

4

5 回答 5

3

那里?希望下面的代码会有所帮助,但我没有用大表测试它。让我知道是否有任何情况可能会影响此代码或导致此代码失败。我是 python 新手,所以我可以提高我的知识:)

import os
from tabula import wrapper
os.chdir("E:/Documents/myPy/")
tables = wrapper.read_pdf("MyPDF.pdf",multiple_tables=True,pages='all',encoding='utf-8',spreadsheet=True)

i=1
for table in tables:
    table.columns = table.iloc[0]
    table = table.reindex(table.index.drop(0)).reset_index(drop=True)
    table.columns.name = None
    #To write Excel
    table.to_excel('output'+str(i)+'.xlsx',header=True,index=False)
    #To write CSV
    table.to_csv('output'+str(i)+'.csv',sep='|',header=True,index=False)
    i=i+1
于 2019-03-16T21:08:57.563 回答
2

即使使用 tabula-py 包装器,您也可以使用 Tabula Java Docs 上的所有相同选项。

在您的情况下,您可以简单地添加 pages = “all”:

from tabula import read_pdf
df = read_pdf(r"C:\Users\Himanshu Poddar\Desktop\pdf_file.pdf", pages ="all")
于 2018-07-19T08:59:49.973 回答
0

如果表格在pdf的所有页面中具有相同的结构(即具有相同的表格结构和相同的相对位置),则可以设置 pages='all' 以获得正确的结果。

如果没有,您可能需要迭代所有页面以解析 pdf。

有一个文档详细解释了它。

于 2019-12-08T12:14:57.067 回答
0

在 read_pdf 中使用multiple_tables=true参数将解决问题

例子 ::

from tabula import wrapper
df = wrapper.read_pdf("sample.pdf",multiple_tables=True)

现在 read_pdf 在包装器中,所以我们需要导入它并使用如上所示

于 2019-09-16T12:58:08.860 回答
0

如果您的 PDF 有多个表格,您可以使用multiple_tables=trueoption。

于 2018-09-25T11:37:42.270 回答