【问题标题】:Extracting Tables from PDFs Using Tabula使用 Tabula 从 PDF 中提取表格
【发布时间】:2017-03-01 17:32:27
【问题描述】:

我遇到了一个名为 Tabula 的很棒的图书馆,它几乎成功了。不幸的是,第一页上有很多我不想让 Tabula 提取的无用区域。根据文档,您可以指定要从中提取的页面区域。但是,无用区域仅在我的 PDF 文件的第一页上,因此,对于所有后续页面,Tabula 将错过顶部。有没有办法将区域条件指定为应用于 PDF 的第一页?

from tabula import read_pdf

df = read_pdf(r"C:\Users\riley\Desktop\Bank Statements\50340.pdf", area=(530,12.75,790.5,561), pages='all')

【问题讨论】:

    标签: python parsing pdf tabula


    【解决方案1】:

    我正在尝试做类似的事情(解析银行对账单)并且遇到了同样的问题。到目前为止,我发现解决此问题的唯一方法是单独解析每个页面。

    唯一的问题是,这需要提前知道您的文件由多少页组成。目前我还没有找到直接使用 Tabula 的方法,所以我决定使用 pyPdf 模块来获取页数。

    import pyPdf
    from tabula import read_pdf
    
    reader = pyPdf.PdfFileReader(open("C:\Users\riley\Desktop\Bank Statements\50340.pdf", mode='rb' ))
    n = reader.getNumPages() 
    
    df = []
    for page in [str(i+1) for i in range(n)]:
        if page == "1":
                df.append(read_pdf(r"C:\Users\riley\Desktop\Bank Statements\50340.pdf", area=(530,12.75,790.5,561), pages=page))
        else:
                df.append(read_pdf(r"C:\Users\riley\Desktop\Bank Statements\50340.pdf", pages=page))
    

    请注意,在单独阅读每个页面或同时阅读所有页面时,会有一些 known and open issues

    祝你好运!

    2017 年 8 月 3 日编辑:

    找到了一种更简单的方法来计算 pdf 的页数,而无需通过 pyPDf

    import re
    def count_pdf_pages(file_path):
        rxcountpages = re.compile(r"/Type\s*/Page([^s]|$)", re.MULTILINE|re.DOTALL)
        with open(file_path, "rb") as temp_file:
            return len(rxcountpages.findall(temp_file.read()))
    

    file_path 是你的文件的路径

    【讨论】:

    • 收到错误ModuleNotFoundError: No module named 'pdf'
    【解决方案2】:

    使用下面的代码!可能对你有帮助!!!

    import os
    os.path.abspath("E:/Documents/myPy/")
    from tabula import wrapper
    tables = wrapper.read_pdf("MyPDF.pdf",multiple_tables=True,pages='all')
    
    i=1
    for table in tables:
        table.to_excel('output'+str(i)+'.xlsx',index=False)
        print(i)
        i=i+1
    

    【讨论】:

      【解决方案3】:

      parameter'guess=False'会解决问题。

      【讨论】:

        【解决方案4】:

        使用 Tabula 从 PDF 中提取表格

        pip install tabula-py
        pip install tabulate
        #reads table from pdf file
        df = read_pdf("abc.pdf", pages=[2:]) #address of pdf file
        print(tabulate(df))
        

        参数:

        页面(str、int、int 列表、可选) 一个可选值,指定要从中提取的页面。它允许 str,int, :int 列表。默认值:1

        例子

        '1-2,3', '全部', [1,2]

        因为第一页没用,丢掉第一页,读到最后一页

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多