如果 pdf 文件中只有一个表,则可以使用代码简单地提取该表
from tabula import read_pdf
df = read_pdf(r"C:\Users\Himanshu Poddar\Desktop\pdf_file.pdf")
但是,如果 pdf 文件中存在多个表。我无法提取这些表。因为它只提取第一个表。
如果 pdf 文件中只有一个表,则可以使用代码简单地提取该表
from tabula import read_pdf
df = read_pdf(r"C:\Users\Himanshu Poddar\Desktop\pdf_file.pdf")
但是,如果 pdf 文件中存在多个表。我无法提取这些表。因为它只提取第一个表。
那里?希望下面的代码会有所帮助,但我没有用大表测试它。让我知道是否有任何情况可能会影响此代码或导致此代码失败。我是 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
即使使用 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")
如果表格在pdf的所有页面中具有相同的结构(即具有相同的表格结构和相同的相对位置),则可以设置 pages='all' 以获得正确的结果。
如果没有,您可能需要迭代所有页面以解析 pdf。
有一个文档详细解释了它。
在 read_pdf 中使用multiple_tables=true
参数将解决问题
例子 ::
from tabula import wrapper
df = wrapper.read_pdf("sample.pdf",multiple_tables=True)
现在 read_pdf 在包装器中,所以我们需要导入它并使用如上所示
如果您的 PDF 有多个表格,您可以使用multiple_tables=true
option。