如果pdf文件中只有一个表,那么可以使用代码
简单地提取from tabula import read_pdf
df = read_pdf(r"C:\Users\Himanshu Poddar\Desktop\pdf_file.pdf")
但是如果pdf文件中存在多个表。我无法提取这些表。因为它只提取第一个表。
答案 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")