【搬磚必備】pdfplumber庫提取pdf文本及表格信息——以讀取《貴州茅臺2020年年報》pdf為例

更多精彩內(nèi)容請移步微信公眾號:Python for Finance
本文介紹一個開源python工具庫-pdfplumber傻工,可以方便地獲取pdf的各種信息,包括文本、表格罚舱、圖表培愁、尺寸等著摔。它不支持修改或生成pdf。

一定续、pdfplumber安裝

由于Anaconda沒有集成pdfplumber庫谍咆,因此需要安裝。安裝方式:打開Anaconda Prompt私股,選擇開始菜單-Anaconda3-Anaconda Prompt摹察。

命令行中輸入

pip install pdfplumber

二、pdfplumber運用步驟

(一)讀取pdf

import pdfplumber
pdf=pdfplumber.open(r'C:\Users\chenwei\Downloads\貴州茅臺2020年年度報告.pdf')

(二)生成page對象

pdfplumber.Page類是pdfplumber整個的核心倡鲸。
通過.pages返回包含pdfplumber.Page實例的列表供嚎,每一個實例代表pdf每一頁的信息,通過列表可訪問具體某一頁。

pages=pdf.pages #生成pdf所有頁面的列表
page01=pdf.pages[0] #返回第一頁對象

步驟一克滴、二也可以with open語句逼争,代碼如下:

with pdfplumber.open(r'C:\Users\chenwei\Downloads\貴州茅臺2020年年度報告.pdf') as pdf:
    pages=pdf.pages #生成pdf所有頁面的列表
    page01=pdf.pages[0] #返回第一頁對象

(三)對Page對象進行處理

常用方法:

(1)pdfplumber庫提供文本提取函數(shù).extract_text() ,將PDF文檔中的文本內(nèi)容按照原文中的換行格式(并非實際的段落)得到字符串對象劝赔。

(2)pdfplumber庫提供了兩種pdf表格提取函數(shù)誓焦,分別為.extract_tables( )及.extract_table( ),兩種函數(shù)提取結(jié)果存在差異着帽。

A).extract_tables( )

可輸出頁面中所有表格杂伟,并返回一個嵌套列表,其結(jié)構(gòu)層次為table→row→cell启摄。此時稿壁,頁面上的整個表格被放入一個大列表中,原表格中的各行組成該大列表中的各個子列表歉备。

B).extract_table( )

返回獨立列表傅是,其結(jié)構(gòu)層次為row→cell。若頁面中存在多個行數(shù)相同的表格蕾羊,則默認輸出頂部表格喧笔;否則,僅輸出行數(shù)最多的一個表格龟再。此時书闸,表格的每一行都作為一個單獨的列表,列表中每個元素即為原表格的各個單元格內(nèi)容利凑。

三浆劲、pdfplumber常用實例:

(一)提取單頁pdf文字

以讀取《貴州茅臺2020年年度報告》pdf第28頁文本為例,代碼如下:

import pdfplumber
with pdfplumber.open(r'C:\Users\chenwei\Downloads\貴州茅臺2020年年度報告.pdf') as pdf:
    page28 = pdf.pages[27] #指定讀取第28頁
    text = page28.extract_text()#提取文本
    print(text)
圖片1.png

(二)提取所有頁面pdf文字并寫入文本

以讀取《貴州茅臺2020年年度報告》pdf文本并寫入txt文件為例哀澈,代碼如下:

import pdfplumber
with pdfplumber.open(r'C:\Users\chenwei\Downloads\貴州茅臺2020年年度報告.pdf') as pdf:
    for page in pdf.pages:
        text = page.extract_text()#提取文本
        txt = open(r'C:\Users\chenwei\Downloads\貴州茅臺2020年年度報告.txt',mode='a',encoding='utf-8')
        txt.write(text)
圖片2.png

(三)提取單頁面的單個表格

采用extract_table()方法提取單個表格牌借,若頁面中存在多個行數(shù)相同的表格,則默認輸出頂部表格割按;否則膨报,僅輸出行數(shù)最多的一個表格。
以讀取《貴州茅臺2020年年度報告》pdf第9頁單個表格為例适荣,第9頁有多個表格现柠,其中,成本分析表是行數(shù)最多的一個表格弛矛,采用extract_table()方法則默認輸出該表格够吩。


圖片3.png
import pdfplumber
import pandas as pd

with pdfplumber.open(r'C:\Users\chenwei\Downloads\貴州茅臺2020年年度報告.pdf') as pdf:
    page09 = pdf.pages[8]   # 第九頁的信息
    table= page09.extract_table()  #提取單個表格
    table=pd.DataFrame(table[1:],columns=table[0])    #得到的table是嵌套list類型,轉(zhuǎn)化成DataFrame更加方便查看
    print(table)
圖片4.png

(四)提取所有頁面的所有表格丈氓,并存到excel的不同sheet中

這涉及pandas將多個dataframe以多個sheet的形式保存到一個excel文件中废恋,需要采用 ExcelWriter方法谈秫。代碼如下:

import pdfplumber
import pandas as pd

writer=pd.ExcelWriter(r'C:\Users\chenwei\Desktop\貴州茅臺2020年年度報告數(shù)據(jù).xls')

with pdfplumber.open(r'C:\Users\chenwei\Downloads\貴州茅臺2020年年度報告.pdf') as pdf:   
    for j in range(len(pdf.pages)):
        page=pdf.pages[j]
        tables = page.extract_tables()  #提取多個表格
        for i in range(len(tables)):
            table=tables[i]
            table=pd.DataFrame(table[1:],columns=table[0])           
            table.to_excel(writer,index=False,sheet_name=f'第{j+1}頁表格{i+1}')    
            writer.save()
writer.close()
圖片5.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者鱼鼓。
  • 序言:七十年代末拟烫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子迄本,更是在濱河造成了極大的恐慌硕淑,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘉赎,死亡現(xiàn)場離奇詭異置媳,居然都是意外死亡,警方通過查閱死者的電腦和手機公条,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門拇囊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人靶橱,你說我怎么就攤上這事寥袭。” “怎么了关霸?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵传黄,是天一觀的道長。 經(jīng)常有香客問我队寇,道長膘掰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任佳遣,我火速辦了婚禮识埋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘零渐。我一直安慰自己惭聂,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布相恃。 她就那樣靜靜地躺著,像睡著了一般笨觅。 火紅的嫁衣襯著肌膚如雪拦耐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天见剩,我揣著相機與錄音杀糯,去河邊找鬼。 笑死苍苞,一個胖子當(dāng)著我的面吹牛固翰,可吹牛的內(nèi)容都是我干的狼纬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼骂际,長吁一口氣:“原來是場噩夢啊……” “哼疗琉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起歉铝,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盈简,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后太示,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柠贤,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年类缤,在試婚紗的時候發(fā)現(xiàn)自己被綠了臼勉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡餐弱,死狀恐怖宴霸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情岸裙,我是刑警寧澤猖败,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站降允,受9級特大地震影響恩闻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜剧董,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一幢尚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翅楼,春花似錦尉剩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至管嬉,卻和暖如春皂林,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚯撩。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工础倍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胎挎。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓沟启,卻偏偏與公主長得像忆家,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子德迹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容