如何在python中使用tabula提取pdf文件中存在的多个表?

时间:2018-04-09 12:58:44

标签: python dataframe data-munging tabula

如果pdf文件中只有一个表,那么可以使用代码

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

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

6 个答案:

答案 0 :(得分:1)

有吗?希望下面的代码对您有所帮助,但我仍未使用大型表对其进行测试。让我知道是否有任何情况可能会影响此代码或使该代码失败。我是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

答案 1 :(得分:0)

即使在使用Tabula-py包装器时,也可以使用与Tabula Java文档中相同的所有选项。

在您的情况下,您只需添加页面=“全部”:

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

答案 2 :(得分:0)

如果您的PDF有多个表,则可以使用multiple_tables=true选项。

答案 3 :(得分:0)

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

示例::

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

现在read_pdf位于包装器中,因此我们需要将其导入并按上述方式使用

答案 4 :(得分:0)

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

否则,您可能需要迭代所有页面以解析pdf。

有一个documention对其进行了详细说明。

答案 5 :(得分:0)

您只需编写此代码,然后从目标PDF文件中提取所有表格

import tabula as tb
file = 'file.pdf'
tables = tb.read_pdf(file, pages = "all", multiple_tables = True)
tb.convert_into(file, "tables.csv", pages = "all")