詳解Python如何利用pdfplumber提取PDF中的表格
前言
pdfplumber 是一個開源的 python 工具庫 ,它可以輕松的獲取 PDF 文本內(nèi)容、標題、表格、尺寸等各種信息,今天來介紹如何使用它來提取 PDF 中的表格。
安裝
首先通過下面命令安裝 pdfplumber 模塊。
pip install pdfplumber
或是使用豆瓣鏡像源安裝。
pip install -i https://pypi.douban.com/simple pdfplumber
案例
這里有一份2020年中國大學生計算機設(shè)計大賽參賽作品獲獎名單,文件為 PDF 格式,每頁都包含表格,表格中包含為各支隊伍的獲獎信息,共158頁。表格前兩頁內(nèi)容如下。


下面將 PDF 中的表格提取出來,并保存到 Excel 中。
首先導(dǎo)入所需要的模塊:
import pdfplumber import pandas as pd
讀取 PDF 文件
read_path = '2020年中國大學生計算機設(shè)計大賽參賽作品獲獎名單.pdf' pdf_2020 = pdfplumber.open(read_path)
pages 屬性包含 PDF 中每頁的信息,循環(huán)每頁內(nèi)容,使用 extract_table() 方法提取每頁中的表格數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)為 DataFrame,最后合并每頁的數(shù)據(jù)。
result_df = pd.DataFrame()
for page in pdf_2020.pages:
table = page.extract_table()
df_detail = pd.DataFrame(table[1:], columns=table[0])
# 合并每頁的數(shù)據(jù)集
result_df = pd.concat([df_detail, result_df], ignore_index=True)
此時DataFrame中數(shù)據(jù)如下:

可以看到通過 extract_table() 提取后的數(shù)據(jù)有許多包含缺失值的列,我們還需要對DataFrame進行進一步處理,刪除全為缺失值的列。
result_df.dropna(axis=1, how='all', inplace=True)

刪了缺失值后,列名也一并刪除了,還需要指定對應(yīng)列名。
result_df.columns = ['獎項', '作品編號', '作品名稱', '參賽學校', '作者', '指導(dǎo)老師']

到現(xiàn)在我們就成功將表格信息完整的提取出來了!
完整代碼
import pdfplumber
import pandas as pd
def read_pdf(read_path, save_path):
pdf_2020 = pdfplumber.open(read_path)
result_df = pd.DataFrame()
for page in pdf_2020.pages:
table = page.extract_table()
print(table)
df_detail = pd.DataFrame(table[1:], columns=table[0])
result_df = pd.concat([df_detail, result_df], ignore_index=True)
result_df.dropna(axis=1, how='all', inplace=True)
result_df.columns = ['獎項', '作品編號', '作品名稱', '參賽學校', '作者', '指導(dǎo)老師']
result_df.to_excel(excel_writer=save_path, index=False, encoding='utf-8')
read_path = r'2020年中國大學生計算機設(shè)計大賽參賽作品獲獎名單.pdf'
save_path = r'2020年中國大學生計算機設(shè)計大賽參賽作品獲獎名單.xlsx'
read_pdf(read_path, save_path)
到此這篇關(guān)于詳解Python如何利用pdfplumber提取PDF中的表格的文章就介紹到這了,更多相關(guān)Python pdfplumber提取PDF表格內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中class內(nèi)置方法__init__與__new__作用與區(qū)別解析
這篇文章主要介紹了Python中class內(nèi)置方法__init__與__new__作用與區(qū)別探究,本文中涉及的類均為Python3中默認的新式類,對應(yīng)Python2中則為顯式繼承了object的class,因為未繼承object基類的舊式類并沒有這些內(nèi)置方法,需要的朋友可以參考下2022-09-09
解決pycharm 工具欄Tool中找不到Run manager.py Task的問題
今天小編就為大家分享一篇解決pycharm 工具欄Tool中找不到Run manager.py Task的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
如何將Pycharm中Terminal使用Powershell作為終端
這篇文章主要介紹了如何將Pycharm中Terminal使用Powershell作為終端問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
Python中兩大Web身份認證主流方案的實現(xiàn)指南
在Web開發(fā)中,身份認證是保護用戶數(shù)據(jù)和系統(tǒng)安全的第一道防線,Session和JWT作為兩種主流的認證方案,各有其適用場景和優(yōu)缺點,下面小編就為大家詳細介紹一下吧2025-10-10
Python中l(wèi)ru_cache的使用和實現(xiàn)詳解
這篇文章主要介紹了Python 中 lru_cache 的使用和實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01
numpy中np.append()函數(shù)用法小結(jié)
在numpy的函數(shù)庫中,np.append()函數(shù)是一個常用的數(shù)組操作函數(shù),它在進行數(shù)組操作時能夠?qū)蓚€數(shù)組進行拼接,并返回一個拼接后的新數(shù)組,下面就來介紹一下具體用法,感興趣的可以了解一下2023-11-11
python3連接MySQL數(shù)據(jù)庫實例詳解
這篇文章主要為大家詳細介紹了python3連接MySQL數(shù)據(jù)庫實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05

