如何利用Python提取pdf中的表格數(shù)據(jù)(附實戰(zhàn)案例)
前言
今天給大家介紹一個Python使用工具,那就是從pdf文件中讀取表格數(shù)據(jù),主要用到第三方庫 pdfplumber。
pdfplumber簡介
pdfplumber是一款基于pdfminer,完全由python開發(fā)的pdf文檔解析庫,不僅可以獲取每個字符、矩形框、線等對象的具體信息,而且還可以抽取文本和表格。目前pdfplumber僅支持可編輯的pdf文檔。
雖然pdfminer也可以對可編輯的pdf文檔進(jìn)行解析,但是比較而言,pdfplumber有以下優(yōu)勢:
- 二者都可以獲取到每個字符、矩形框、線等對象的具體信息,但是pdfplumber在pdfminer的基礎(chǔ)上進(jìn)行了封裝和處理,使得到的對象更易于使用,對用戶更友好。
- 二者都能對文本解析,但是pdfminer輸出的文本在布局上可能與原文差別比較大,但是pdfplumber抽取出的文本與原文可以有更高的一致性。
- pdfplumber實現(xiàn)了表格抽取邏輯,基于最基本的字符、線框等對象的位置信息,定位、識別pdf文檔中的表格。
首先安裝
pip install pdfplumber
實戰(zhàn)案例
本次實戰(zhàn),我們需要將pdf中的獲獎隊伍信息提取出來,然后保存到excel表格中。
?原始pdf文件中大多數(shù)都是如上圖所示的表格,這里為了不泄露個人隱私,我就先打上碼了哈。
接著開始敲代碼提取表格數(shù)據(jù)!
import pandas as pd import pdfplumber pdf = pdfplumber.open("第十屆“正大杯”國獎名單.pdf") df = pd.DataFrame() for i in range(3,53): # 這里3是指表格信息是從第4頁開始的(程序計數(shù)是從0開始,所以這里第4頁對應(yīng)程序中的3),53是結(jié)束位置 page = pdf.pages[i] # 讀取pdf中的每一頁 table = page.extract_table() # 從頁數(shù)據(jù)中提取表格數(shù)據(jù) df = df.append(table) # 將提取的數(shù)據(jù)轉(zhuǎn)換為DataFrame二維表格形式 df.drop_duplicates(inplace=True) # 刪除重復(fù)值 df.to_excel("第十屆“正大杯”國獎名單.xlsx", header=False, index=False) # 將提取的數(shù)據(jù)保存為excel
這里,我先是用了循環(huán)來提取多頁,3是指表格信息是從第4頁開始的(程序計數(shù)是從0開始,所以這里第4頁對應(yīng)程序中的3),53是結(jié)束位置 。
運行之后的結(jié)果如下:
?很簡單就將pdf中的表格提取出來了。
做到這里,我只是將一個pdf中的數(shù)據(jù)提取出來了,可是還有幾個類似的pdf需要提取,于是我將上述代碼功能進(jìn)行了簡單的封裝(功能還比較簡陋,各位可根據(jù)自己的需要進(jìn)行擴展)。
def pdf_to_excel(file_path,start:int,end:int,excel_name=None): ''' params: file_path:需要提取表格的pdf文件的絕對路徑 start:出現(xiàn)表格的起始頁碼 end:表格結(jié)束頁碼 excel_name:最后保存excel文件的文件名(默認(rèn)為原始pdf文件名) ''' pdf = pdfplumber.open(file_path) if not excel_name: excel_name = file_path.split('\\')[-1].split('.')[0] df_result = pd.DataFrame() for i in range(start-1,end): page = pdf.pages[i] table = page.extract_table() df_result = df_result.append(table) df_result = df_result.drop_duplicates(inplace=True) df_result.to_excel(excel_name+'.xlsx',index=False) pdf_to_excel(file_path=r'C:xxx.pdf',start=4,end=53)
以上就是本次分享的python小工具,希望對有同樣需求的你有所幫助!
到此這篇關(guān)于如何利用Python提取pdf中的表格數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Python提取pdf表格數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python隨機生成大小寫字母數(shù)字混合密碼(僅20行代碼)
這篇文章主要介紹了python隨機生成大小寫字母數(shù)字混合密碼,主要是利用random模塊隨機生成數(shù)字,大小寫字母,通過循環(huán)次數(shù)來實現(xiàn)此功能,需要的朋友可以參考下2020-02-02Pandas數(shù)據(jù)集的合并與連接merge()方法
Pandas數(shù)據(jù)集的合并與連接(merge())是數(shù)據(jù)處理過程中常用的操作之一,在使用Pandas進(jìn)行數(shù)據(jù)集合并時,可以使用merge()函數(shù)將兩個或多個數(shù)據(jù)集按照指定的列進(jìn)行合并,本文就來介紹一下,感興趣的可以了解一下2023-11-11python Matplotlib數(shù)據(jù)可視化(1):簡單入門
這篇文章主要介紹了python Matplotlib的相關(guān)資料,幫助大家入門matplotlib,繪制各種圖表,感興趣的朋友可以了解下2020-09-09