利用Python怎么將pdf表格導(dǎo)入到excel-創(chuàng)新互聯(lián)

這篇文章給大家介紹利用Python怎么將pdf表格導(dǎo)入到excel,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括晉安網(wǎng)站建設(shè)、晉安網(wǎng)站制作、晉安網(wǎng)頁制作以及晉安網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,晉安網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到晉安省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

避免CV大法

pdf 文件的表格的數(shù)據(jù)可以復(fù)制,但是這是一項(xiàng)非常繁瑣的事情。所以我首先考慮的是,Python 可否幫助我們高效且規(guī)范地讀取 pdf 中的表格數(shù)據(jù)。所以一頓的檢索,發(fā)現(xiàn)了一個(gè)比較優(yōu)質(zhì)處理 pdf 的庫:pdfplumber,當(dāng)然這個(gè)庫需要大家 pip install pdfplumber 去進(jìn)行安裝。

  • 導(dǎo)入 pdfplumber 庫

  • 通過 pdfplumber.open() 函數(shù) 獲取 mt2018.pdf 文件對象

  • 通過該 對象.pages 獲取 pdf 每頁的對象,截取我們需要的頁對象即可

  • 通過 頁對象.extract_tables() 獲取表格數(shù)據(jù)(若需要獲取文本:頁對象.extract_text())


代碼實(shí)現(xiàn):

import pdfplumber


# 獲取 pdf 文件對象
pdf_mt = pdfplumber.open("mt2018.pdf")

# 因?yàn)槲倚枰@取的資產(chǎn)負(fù)債表在 51-53頁 但是索引從0開始 所以切片取 50-52即可
for pdf_pg in pdf_mt.pages[50:53]:
  
  # 只提取當(dāng)前頁表格數(shù)據(jù) 
  print(pdf_pg.extract_tables())
  
  
--------------------------------------------------------------------------
結(jié)果比較多,截取一部分:
[[['項(xiàng)目', '附注', '期末余額', '期初余額'], ['流動(dòng)資產(chǎn):', '', '', ''], ['貨幣資金', '1', '112,074,791,420.06', '87,868,869,913.34'], ['結(jié)算備付金', '', '', ''], ['拆出資金', '', '', ''], ['以公允價(jià)值計(jì)量且其變動(dòng)計(jì)入當(dāng)\n期損益的金融資產(chǎn)', '', '', ''], ['衍生金融資產(chǎn)', '', '', ''], ['應(yīng)收票據(jù)及應(yīng)收賬款', '2', '563,739,710.00', '1,221,706,039.00']]]

將完整表保存到 csv 文件中

我們發(fā)現(xiàn),返回的數(shù)據(jù)集是一個(gè)三維的列表。那么在我們平時(shí)處理的 excel 表格數(shù)據(jù)(行與列)都是二維的數(shù)據(jù)。那么,這多出的一維是什么呢?其實(shí)就是我們的夜[頁]~ 再來一個(gè)循環(huán)取出二維數(shù)據(jù)進(jìn)行保存即可

for pdf_pg in pdf_mt.pages[50:53]:
  for pdf_tb in pdf_pg.extract_tables():
    print(pdf_tb)
    
------------------------------------------------------------------------------
結(jié)果比較多,截取一部分:
[['項(xiàng)目', '附注', '期末余額', '期初余額'], ['流動(dòng)資產(chǎn):', '', '', ''], ['貨幣資金', '1', '112,074,791,420.06', '87,868,869,913.34'], ['結(jié)算備付金', '', '', ''], ['拆出資金', '', '', ''], ['以公允價(jià)值計(jì)量且其變動(dòng)計(jì)入當(dāng)\n期損益的金融資產(chǎn)', '', '', ''], ['衍生金融資產(chǎn)', '', '', ''], ['應(yīng)收票據(jù)及應(yīng)收賬款', '2', '563,739,710.00', '1,221,706,039.00']]

但是,真的那么簡單嗎?這時(shí),我們就需要細(xì)品我們的 pdf 了,如下圖

利用Python怎么將pdf表格導(dǎo)入到excel

我們發(fā)現(xiàn),一張完整的資產(chǎn)負(fù)債表分布在多頁上。也就是說,每一頁的里面的表格數(shù)據(jù)都是一個(gè)三維的列表,所以我們保存數(shù)據(jù)的時(shí)候,需要讓其有共同的表頭(列索引),并且進(jìn)行拼接。

那必須就要強(qiáng)推我們的 pandas 了,pandas.DataFrame() 非常完美的創(chuàng)建表格式的二維數(shù)組,以及指定列索引(表頭)。包括可以直接 使用 df.append() 進(jìn)行共同表頭數(shù)據(jù)的堆疊拼接。

import pdfplumber
import pandas as pd
import numpy as np

# 創(chuàng)建僅有表頭的 dataframe 數(shù)組
pdf_df = pd.DataFrame(columns=['項(xiàng)目', '附注', '期末余額', '期初余額'])

# 獲取 pdf 文件對象
pdf_mt = pdfplumber.open("mt2018.pdf")

# 因?yàn)槲倚枰@取的資產(chǎn)負(fù)債表在 51-53頁 但是索引從0開始 所以切片取 50-52即可
for pdf_pg in pdf_mt.pages[50:53]:
  
  # 獲取二維列表
  for pdf_tb in pdf_pg.extract_tables():
    
    # 將其拼接
    pdf_df = pdf_df.append(pd.DataFrame(np.array(pdf_tb),columns=['項(xiàng)目', '附注', '期末余額', '期初余額']))

# 顯示后五條
pdf_df.tail()

dataframe數(shù)據(jù)輸出如下:

利用Python怎么將pdf表格導(dǎo)入到excel

pdf 53頁如下:

利用Python怎么將pdf表格導(dǎo)入到excel

實(shí)際上,大家也發(fā)現(xiàn),我們獲取的最后一頁的數(shù)據(jù)還有一部分是另一個(gè)表的,所以我們需要將其去除,并且有序的設(shè)置行索引,再保存到 csv 文件中。

# 去除后三行
pdf_df = pdf_df.iloc[:-3,:]

# 重置索引
pdf_df = pdf_df.reset_index(drop=True)

# 保存到 csv 文件中
pdf_df.to_csv("mt_2018.csv")

關(guān)于利用Python怎么將pdf表格導(dǎo)入到excel就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

分享文章:利用Python怎么將pdf表格導(dǎo)入到excel-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://muchs.cn/article32/ceeepc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、用戶體驗(yàn)、網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管