2017-03-01 68 views
0

我遇到了一個叫Tabula的偉大圖書館,它幾乎成功了。不幸的是,第一頁上有很多無用的區域,我不想Tabula提取。根據文檔,您可以指定要從中提取的頁面區域。但是,無用的區域只在我的PDF文件的第一頁上,因此,對於所有後續頁面,Tabula將錯過最上面的部分。有沒有辦法指定區域條件只有適用於PDF的第一頁?從PDF中提取表格使用Tabula

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') 

回答

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是通向你的課程

的文件