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