<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何使用Python提取PDF表格及文本,并保存到Excel

          共 4489字,需瀏覽 9分鐘

           ·

          2021-04-13 21:21


          導(dǎo)讀:介紹一個開源Python工具庫——pdfplumber。


          作者:朱衛(wèi)軍
          來源:Python大數(shù)據(jù)分析(ID:pydatas)




          PDF是一種便攜式文檔格式,由Adobe公司設(shè)計。因?yàn)椴皇芷脚_限制,且方便保存和傳輸,所以PDF非常受歡迎。

          目前市場上有很多PDF工具,大部分是閱讀類,也有支持對PDF的修改、轉(zhuǎn)換等功能,但這部分工具不少是收費(fèi)的。

          這次介紹一個開源Python工具庫——pdfplumber,可以方便地獲取PDF的各種信息,包括文本、表格、圖表、尺寸等。

          pdfplumber在github上有英文官方文檔,后面我們會撿重點(diǎn)講解,先看下如何用pdfplumber提取PDF表格?

          以NBA 2020-2021 常規(guī)賽數(shù)據(jù)作為范例,PDF表格如下:


          • 第一步:使用pdfplumber提取表格文本

          # 導(dǎo)入pdfplumber
          import pdfplumber

          # 讀取pdf文件,保存為pdf實(shí)例
          pdf =  pdfplumber.open("E:\\nba.pdf"

          # 訪問第二頁
          first_page = pdf.pages[1]

          # 自動讀取表格信息,返回列表
          table = first_page.extract_table()

          table

          輸出:


          • 第二步:整理成dataframe格式,保存為excel

          import pandas as pd

          # 將列表轉(zhuǎn)為df
          table_df = pd.DataFrame(table_2[1:],columns=table_2[0])

          # 保存excel
          table_df.to_excel('test.xlsx')

          table_df

          輸出:


          一個小小的腳本,不到十行代碼,便將PDF表格提取并轉(zhuǎn)化為dataframe格式,最終保存到excel。

          有個初步認(rèn)知后,接下來詳細(xì)講講pdfplumber的安裝、導(dǎo)入、api接口等信息。


          01 pdfplumber簡介


          前面已經(jīng)介紹過pdfplumber的用途,也用一個小案例展示了如何提取表格,我覺得對于pdfplumber只需要了解三點(diǎn)就可以。

          1. 它是一個純Python第三方庫,適合Python 3.x版本
          2. 它用來查看PDF各類信息,能有效提取文本、表格
          3. 它不支持修改或生成PDF,也不支持對pdf掃描件的處理

          Github地址
          https://github.com/jsvine/pdfplumber


          02 pdfplumber安裝和導(dǎo)入


          同其他Python庫一樣,pdfplumber支持使用pip安裝,在命令行輸入:

          pip install pdfplumber

          如果遇到安裝慢的問題,可以替換鏡像源,會快很多。

          pdfplumber安裝后,用import導(dǎo)入即可使用:

          import pdfplumber
          ....



          03 pdfplumber簡單使用


          pdfplumber中有兩個基礎(chǔ)類,PDF和Page。看字面意思能猜出,前者是處理整個文檔,后者是處理頁面。

          • pdfplumber.PDF類

          • .metadata:獲取PDF基礎(chǔ)信息,返回字典
          • .pages:一個包含pdfplumber.Page實(shí)例的列表,每一個實(shí)例代表PDF每一頁的信息。

          • pdfplumber.Page類

          這是pdfplumber的核心功能,對PDF的大部分操作都是基于這個類,包括提取文本、表格、尺寸等。

          這里暫不一一列舉它的屬性和方法。

          通過一個簡單的案例,就可以明白它們的作用。示例PDF文檔,共兩頁:


          1. 讀取PDF

          # 導(dǎo)入pdfplumber
          import pdfplumber

          # 讀取pdf文件,返回pdfplumber.PDF類的實(shí)例
          pdf = pdfplumber.open("e:\\nba2.pdf")

          2. 獲取該P(yáng)DF文檔的信息

          # 通過pdfplumber.PDF類的metadata屬性獲取pdf信息
          pdf.metadata

          輸出:


          這些是PDF的基礎(chǔ)信息,包括作者、來源、日期等。

          3. 總頁數(shù)

          # 通過pdfplumber.PDF類的metadata屬性獲取pdf頁數(shù)
          len(pdf.pages)

          4. 讀取第一頁的頁寬、頁高等信息

          # 第一頁pdfplumber.Page實(shí)例
          first_page = pdf.pages[0]

          # 查看頁碼
          print('頁碼:',first_page.page_number)

          # 查看頁寬
          print('頁寬:'first_page.width)

          # 查看頁高
          print('頁高:'first_page.height)

          輸出:


          5. 讀取第一頁的文本

          # 讀取文本
          text = first_page.extract_text()
          print(text)

          輸出:


          6. 讀取第二頁的表格

          import pandas as pd

          # 第二頁pdfplumber.Page實(shí)例
          first_page = pdf.pages[1]

          # 自動讀取表格信息,返回列表
          table = first_page.extract_tables()

          # 將列表轉(zhuǎn)為df
          table_df = pd.DataFrame(table_2[1:],columns=table_2[0])

          table_df


          pdfplumber提取表格有很多的細(xì)節(jié)需要處理,這里給到的范例表格線框比較規(guī)范,所以能很簡單的提取,但對于線框不完全(包含無線框)的表格,其效果就差了不少。

          在實(shí)際項(xiàng)目所需處理的PDF文檔中,線框完全及不完全的表格都比較多,為了能夠理解pdfplumber實(shí)現(xiàn)表格抽取的原理和方法,我們需要去細(xì)究相關(guān)參數(shù)的設(shè)置。

          正如案例所示,pdfplumber.Page對象的.extract_table()方法可以提取表格,返回從頁面上最大的表中提取的文本,以列表列表的形式顯示,結(jié)構(gòu)為row -> cell。

          • 表格抽取參數(shù)設(shè)置

          默認(rèn)情況下,extract_table使用頁面的垂直和水平線(或矩形邊緣)作為單元格分隔符。該方法可以通過table_settings參數(shù)進(jìn)行高度自定義。可能的設(shè)置及其默認(rèn)值:

          {
              "vertical_strategy""lines"
              "horizontal_strategy""lines",
              "explicit_vertical_lines": [],
              "explicit_horizontal_lines": [],
              "snap_tolerance"3,
              "join_tolerance"3,
              "edge_min_length"3,
              "min_words_vertical"3,
              "min_words_horizontal"1,
              "keep_blank_chars": False,
              "text_tolerance"3,
              "text_x_tolerance": None,
              "text_y_tolerance": None,
              "intersection_tolerance"3,
              "intersection_x_tolerance": None,
              "intersection_y_tolerance": None,
          }


          pdfplumber支持對圖表進(jìn)行可視化調(diào)試,能輸出圖像,顯示如何提取表。



          04 pdfplumber的獨(dú)特之處


          Python中有很多庫可以處理PDF,比如PyPDF2、pdfminer等,那pdfplumber的優(yōu)勢在哪呢?

          首先,pdfplumber能輕松訪問有關(guān)PDF對象的所有詳細(xì)信息,且用于提取文本和表格的方法高級可定制,使用者可根據(jù)表格的具體形式來調(diào)整參數(shù)。

          最關(guān)鍵的是pdfplumber作者持續(xù)在維護(hù)該庫,而同樣受歡迎的PyPDF2已經(jīng)不再維護(hù)了。

          公眾號后臺對話框回復(fù)關(guān)鍵字源代碼,獲取文中案例及代碼。


          延伸閱讀??

          利用Python進(jìn)行數(shù)據(jù)分析》(原書第2版)

          干貨直達(dá)??


          更多精彩??

          在公眾號對話框輸入以下關(guān)鍵詞
          查看更多優(yōu)質(zhì)內(nèi)容!

          PPT | 讀書 | 書單 | 硬核 | 干貨 | 講明白 | 神操作
          大數(shù)據(jù) | 云計算 | 數(shù)據(jù)庫 | Python | 爬蟲 | 可視化
          AI | 人工智能 | 機(jī)器學(xué)習(xí) | 深度學(xué)習(xí) | NLP
          5G | 中臺 | 用戶畫像 1024 | 數(shù)學(xué) | 算法 數(shù)字孿生

          據(jù)統(tǒng)計,99%的大咖都關(guān)注了這個公眾號
          ??
          瀏覽 18
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  豆花成人无码视频 | 成人超碰福利 | A一级黄色片在线看 | 黄色片AA | 一级片直播 |