欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python一鍵提取PDF中的表格到Excel的方法詳解

 更新時間:2023年08月07日 11:24:28   作者:艾派森  
從PDF文件獲取表格中的數(shù)據(jù),也是日常辦公容易涉及到的一項工作,一個一個復制吧,效率確實太低了,用Python從PDF文檔中提取表格數(shù)據(jù),并寫入Excel文件,灰?;页8咝?本文就給大家介紹一下如何使用Python一鍵提取PDF中的表格到Excel,需要的朋友可以參考下

一、Python處理Excel

  • Python處理Excel的好處

1.批量操作:當要處理眾多Excel文件時,例如出現(xiàn)重復性的手工勞動,那么使用Python就可以實現(xiàn)批量掃描文件、自動化進行處理,利用代碼代替手工重復勞動,實現(xiàn)自動化,是Python第一個比Excel強大的地方

2.大型文件,當Excel文件超過幾十兆、甚至上百兆時,打開文件很慢、處理文件更加慢,這時候若使用Python,會發(fā)現(xiàn)處理幾十兆、幾百兆甚至幾GB都是沒有問題的

3.當使用Excel進行復雜的計算時,會使用VBA,但是VBA本身是過時并且復雜的語言,Python是當前最簡單且容易實現(xiàn)的一門語言,用Python能夠處理比VBA難度更高的業(yè)務邏輯

4.Python是通用語言,不僅可以處理Excel,使用Python就可以得到很多額外的功能,例如:爬蟲、發(fā)布網(wǎng)頁的Web服務、與數(shù)據(jù)庫進行連接、同時結合word和PPT進行處理、加入定時任務處理、人工智能分析等,各種額外的功能,這是Excel和VBA所不具備的

  • Python處理Excel主要有三大類庫

1.pandas:是Python領域非常重要的,用于數(shù)據(jù)分析和可視化的類庫,在處理Excel中,90%可以利用pandas類庫就可以搞掂,利用pandas就可以讀取Excel、處理Excel和輸出Excel,但是pandas也有缺點,就是無法做到格式類,例如Excel中合并單元、大量復雜的樣式(看起來很精美)的時候,用pandas無法搞掂,此時,依然是使用pandas結合openyxl、xlwings來搞掂需求

2.openpyxl:若電腦上未安裝office時,也可以使用openpyxl,這個類型可以運行在linux上,并且也可以實現(xiàn)操作大部分Excel格式和樣式的功能,使用它配合pandas,也可以完成大部分場景的需求

3.xlwings:比openyxl更加強大,只能運行在Windows或者Mac系統(tǒng),并且該系統(tǒng)中必須安裝了office才能運行,xlwings的原理,就是基于當前系統(tǒng)已經(jīng)安裝好的office軟件,來進行功能的拓展來操作Excel

  • 使用pandas的時候,經(jīng)常會結合其他類庫,來完成更加復雜的功能
    • requests, bs4:可以完成爬蟲的功能
    • flask:可以做網(wǎng)頁,把表格展示在網(wǎng)頁上
    • Matplotlib:讀取表格后,進行可視化
    • sklearn:進行復雜的數(shù)據(jù)分析時,也可以結合機器學習Sklearn把讀取的Excel數(shù)據(jù),進行數(shù)據(jù)分析和機器學習
    • Python-docx:也可以結合Python-docx類庫,實現(xiàn)Excel和word的互通
    • smtplib:也可以使用smtplib,講Excel數(shù)據(jù)發(fā)送郵件出去
  • 開發(fā)環(huán)境

操作系統(tǒng):使用windows, mac都可以

Python版本:系統(tǒng)中需要安裝Python3.6以上的版本,Python2已經(jīng)過期不建議使用,Python3.6以前的版本功能相對弱,最好就是采用Python3.6以上的版本

開發(fā)工具:有兩個可以選擇,jupyter notebook,是個網(wǎng)頁編輯器,可以運行Python,常常用于交互性、探索性的開發(fā);pycharm,用于成熟腳本,或者web服務的一些開發(fā);這兩個工具可以隨意選擇

重要類庫:xlwings, pandas, matplotlib等

二、提取PDF表格到excel

從PDF文件獲取表格中的數(shù)據(jù),也是日常辦公容易涉及到的一項工作。一個一個復制吧,效率確實太低了。用Python從PDF文檔中提取表格數(shù)據(jù),并寫入Excel文件,灰常灰常高效。上市公司的年報往往包含幾百張表格,用它作為例子再合適不過,搞定這個,其他含表格的PDF都是小兒科了。今天以"保利地產(chǎn)年報"為例,這個PDF文檔中有321頁含有表格,總表格數(shù)超過這個數(shù)了。

先導入PDF讀取模塊`pdfplumber`,隨便挑一頁看下表格數(shù)據(jù)的結構。如下,我們挑了第4頁`pages[3]`來讀取其中的表格,并顯示。這里讀取表格,用到了`extract_tables()`,即默認每頁有多個表格。它會將單個表格的數(shù)據(jù)按行讀取存入列表,再將每個表格的所有數(shù)據(jù)匯總存到一個上一級列表,最后將所有表格的數(shù)據(jù)匯總到一個大列表。而`extract_table()`方法則只能讀一張表,當一個頁面有多張表,就默認選第一個,因此會漏掉后面的。而且它們的數(shù)據(jù)結構也不同,差異如下。 

“保利地產(chǎn)年報”第四頁如圖所示,讀取的結果存到列表`table`,顯示如下:

#觀察讀取出來的表格的數(shù)據(jù)結構
import pdfplumber
with pdfplumber.open("保利地產(chǎn)年報.pdf") as p:
    page = p.pages[3] #選取第4頁(起始頁為0)
    table = page.extract_tables() #多表格讀取,存為嵌套列表
    print(table)
[[['', '常用詞語釋義', None, None, None, None, None, ''], ['中國證監(jiān)會', None, '', '指', '', '', '中國證券監(jiān)督管理委員會', ''], ['國資委', None, '', '指', '', '', '國務院國有資產(chǎn)監(jiān)督管理委員會', ''], ['上交所', None, '', '指', '', '上海證券交易所', None, None], ['公司、本公司、保利地產(chǎn)', None, '指', None, None, '保利發(fā)展控股集團股份有限公司,原名稱保利房\n地產(chǎn)(集團)股份有限公司', None, None], ['報告期、本報告期', None, '', '指', '', '2018年度', None, None], ['元、萬元、億元', None, '', '指', '', '人民幣元、人民幣萬元、人民幣億元', None, None]], [['公司的中文名稱', '保利發(fā)展控股集團股份有限公司'], ['公司的中文簡稱', '保利地產(chǎn)'], ['公司的外文名稱', 'Poly Developments and Holdings Group Co., Ltd.'], ['公司的外文名稱縮寫', 'PDH'], ['公司的法定代表人', '宋廣菊']], [['', '董事會秘書', '證券事務代表'], ['姓名', '黃海', '尹超'], ['聯(lián)系地址', '廣東省廣州市海珠區(qū)閱江中路688號保利國際廣場北塔33層董事會辦公室', None], ['電話', '020-89898833', None], ['傳真', '020-89898666-8831', None], ['電子信箱', 'stock@polycn.com', None]], [['公司注冊地址', '廣州市海珠區(qū)閱江中路688號保利國際廣場30-33層'], ['公司注冊地址的郵政編碼', '510308'], ['公司辦公地址', '廣州市海珠區(qū)閱江中路688號保利國際廣場北塔30-33層'], ['公司辦公地址的郵政編碼', '510308'], ['公司網(wǎng)址', 'www.polycn.com;www.gzpoly.com'], ['電子信箱', 'stock@polycn.com']], [['公司選定的信息披露媒體名稱', '《中國證券報》、《上海證券報》、《證券時報》'], ['登載年度報告的中國證監(jiān)會指定網(wǎng)站的網(wǎng)址', 'www.sse.com.cn'], ['公司年度報告?zhèn)渲玫攸c', '公司董事會辦公室']]]

確保可正常讀取表格,以及了解讀取出來的表格的數(shù)據(jù)結構,下面就可以一次性讀取出所有表格,并存入Excel文件中了。導入相應模塊,然后使用`pdfplumber`打開PDF文件。使用`Workbook()`新建Excel工作簿,然后使用`remove()`將其自帶的工作表刪除。因為我們想用PDF文件中表格所在的頁碼給相應的Excel工作表命名,以便二者的編號一致,方便后續(xù)查詢。所以需要使用`enumerate()`給PDF的頁從1開始編號。然后使用`extract_tables()`獲取表格數(shù)據(jù)。

當然,如果當頁沒有表格,則`extract_tables()`獲得的是空值`None`。在后續(xù)的操作中,空值會報錯,所以加入`if`語句來做個判斷。只有當列表`tables`不為空,即里面有貨的時候,才建新的Excel表格,并執(zhí)行后續(xù)的寫入操作。列表`tables`若為空(即當頁沒有表格),則直接跳到下一頁。

當發(fā)現(xiàn)當頁有表格后,新建一個Excel表,以“Sheet”加上此時PDF的頁碼(比如“Sheet3”)命名。在寫入數(shù)據(jù)時,先用一個`for`循環(huán)獲得單個表格的數(shù)據(jù),再用第二個`for`循環(huán)獲得表格中一行的數(shù)據(jù),然后寫入Excel表。最后保存數(shù)據(jù)。由于表格太多,程序運行時間較長,大約需要3分鐘。

import pdfplumber
from openpyxl import Workbook    
with pdfplumber.open("保利地產(chǎn)年報.pdf") as p:
    wb = Workbook() #新建excel工作簿
    wb.remove(wb.worksheets[0])#刪除工作簿自帶的工作表
    for index,page in enumerate(p.pages,start = 1): #從1開始給所有頁編號
        tables = page.extract_tables() #讀取表格
        if tables: #判斷是否存在表格,若不存在,則不執(zhí)行下面的語句
            ws = wb.create_sheet(f"Sheet{index}") #新建工作表,表名的編號與表在PDF中的頁碼一致
            for table in tables: #遍歷所有列表
                for row in table: #遍歷列表中的所有子列表,里面保存著行數(shù)據(jù)
                    ws.append(row) #寫入excel表
    wb.save("保利地產(chǎn)年報表格.xlsx")

數(shù)百個表格就這樣瀟灑地復制到Excel表格中了。

如果想要指定某個表格,在提取數(shù)據(jù)的時候指定頁碼即可。但如果想批量導出大量不同公司的年報的指定表格,則需要使用關鍵詞定位了。還好,無論深圳市場還是上海市場,公司的年報中的標題基本都是唯一的,這給我們用標題做關鍵詞提供了方便。假設我們需要提取公司“主要會計數(shù)據(jù)”下面的表格,則用關鍵詞“主要會計數(shù)據(jù)”定位即可。如下以此為例進行操作。 

import os
import pdfplumber
from openpyxl import Workbook    
path='PDF'  #文件所在文件夾
files = [path+"\\"+i for i in os.listdir(path)] #獲取文件夾下的文件名,并拼接完整路徑
key_words = "主要會計數(shù)據(jù)"
for file in files:
    with pdfplumber.open(file) as p:
        wb = Workbook() #新建excel工作簿
        wb.remove(wb.worksheets[0])#刪除工作簿自帶的工作表
        #獲取關鍵詞所在頁及下一頁的頁碼
        pages_wanted = []
        for index,page in enumerate(p.pages): #從0開始給所有頁編號
            if key_words in page.extract_text():
                pages_wanted.append(index)
                pages_wanted.append(index+1)
                break
        #提取指定頁碼里的表格
        for i in pages_wanted:     
            page = p.pages[i]
            tables = page.extract_tables() #讀取表格
            if tables: #判斷是否存在表格,若不存在,則不執(zhí)行下面的語句
                ws = wb.create_sheet(f"Sheet{i+1}") #新建工作表,表名的編號與表在PDF中的頁碼一致
                for table in tables: #遍歷所有列表
                    for row in table: #遍歷列表中的所有子列表,里面保存著行數(shù)據(jù)
                        ws.append(row) #寫入excel表
        wb.save("Excel\\{}.xlsx".format(file.split("\\")[1].split(".")[0]))

以上,增加了一段獲取關鍵詞所在頁碼及下一頁的頁碼的程序。之所以要獲取關鍵詞下一頁頁碼,是因為有些表格會跨頁,為了不遺漏數(shù)據(jù),寧愿多獲取一點。一旦找到關鍵詞所在頁,馬上用`break`停止`for`循環(huán)。后面再遍歷`pages_wanted`里面儲存的頁碼,提取表格并寫入Excel文件,并保存即可。批量獲取的指定內(nèi)容保存在`Excel`文件夾下。

以上就是使用Python一鍵提取PDF中的表格到Excel的方法詳解的詳細內(nèi)容,更多關于Python提取PDF表格到Excel的資料請關注腳本之家其它相關文章!

相關文章

  • Python?使用pip在windows命令行中安裝HDF?reader包的操作方法

    Python?使用pip在windows命令行中安裝HDF?reader包的操作方法

    HDF reader包是一個常用來將.mat類型數(shù)據(jù)導入到python在這里插入代碼片中使用的包,非常好用,今天介紹一下,如何在命令行中安裝這個包,需要的朋友可以參考下
    2022-12-12
  • 基于Django用戶認證系統(tǒng)詳解

    基于Django用戶認證系統(tǒng)詳解

    下面小編就為大家分享一篇基于Django用戶認證系統(tǒng)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Python使用PyQt5/PySide2編寫一個極簡的音樂播放器功能

    Python使用PyQt5/PySide2編寫一個極簡的音樂播放器功能

    這篇文章主要介紹了Python中使用PyQt5/PySide2編寫一個極簡的音樂播放器功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • python中for循環(huán)把字符串或者字典添加到列表的方法

    python中for循環(huán)把字符串或者字典添加到列表的方法

    今天小編就為大家分享一篇python中for循環(huán)把字符串或者字典添加到列表的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python天氣語音播報小助手

    Python天氣語音播報小助手

    馬上就要迎來國慶小長假了,激不激動,興不興奮!那今年國慶:天氣怎么樣?能不能出門逛街?能不能出去旅游?旅游出門就要挑個好的天氣!下雨天哪兒哪兒都不舒服。今天小編帶大家寫一款Python天氣語音播報小助手
    2021-09-09
  • Pandas高級教程之Pandas中的GroupBy操作

    Pandas高級教程之Pandas中的GroupBy操作

    通常來說groupby操作可以分為三部分:分割數(shù)據(jù),應用變換和和合并數(shù)據(jù),本文將會詳細講解Pandas中的groupby操作,感興趣的朋友一起看看吧
    2021-07-07
  • 在Python中執(zhí)行系統(tǒng)命令的方法示例詳解

    在Python中執(zhí)行系統(tǒng)命令的方法示例詳解

    最近在做那個測試框架的時候發(fā)現(xiàn)對python執(zhí)行系統(tǒng)命令不太熟悉,所以想著總結下,下面這篇文章主要給大家介紹了關于在Python中執(zhí)行系統(tǒng)命令的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • python爬蟲之自制英漢字典

    python爬蟲之自制英漢字典

    這篇文章主要為大家詳細介紹了python爬蟲之自制英漢字典的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python 實用技巧之利用Shell通配符做字符串匹配

    Python 實用技巧之利用Shell通配符做字符串匹配

    這篇文章主要介紹了Python 實用技巧之利用Shell通配符做字符串匹配的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 機器學習經(jīng)典算法-logistic回歸代碼詳解

    機器學習經(jīng)典算法-logistic回歸代碼詳解

    這篇文章主要介紹了機器學習經(jīng)典算法-logistic回歸代碼詳解,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12

最新評論