本文目錄一覽:
用python批量提取pdf的表格數據,保存為excel
pdfplumber 是一個開源 python 工具庫-,可以方便地獲取 pdf 的各種信息,包括文本、表格、圖表、尺寸等。完成我們本文的需求,主要使用 pdfplumber 提取 pdf 表格數據。
python 中還有很多庫可以處理 pdf,比如 PyPDF2、pdfminer 等,本文選擇pdfplumber 的原因在於能輕鬆訪問有關 PDF 的所有詳細信息,包括作者、來源、日期等,並且用於提取文本和表格的方法靈活可定製。大家可以根據手頭數據需求,再去解鎖 pdfplumber 的更多用法。
Python利器:如何處理PDF表格數據
大家好,我是Peter~
在很多情況下,我們都需要處理PDF格式的文件。尤其當我們遇到PDF表格數據需要進行提取,真的是一個令人頭疼的問題。
因為PDF文件不能像Word那樣直接複製,即使複製了再黏貼也可能會出現格式排版錯亂甚至亂碼問題。如何從一個PDF文件提取出表格數據?本文提供兩個解決方案:
首先提供的一種方法是從文字 PDF 中提取表格信息的工具:Camelot,它能夠直接將大部分表格轉換為 Pandas 的 Dataframe。
更多的詳細信息,請參考項目地址:
camelot的安裝有多種方式。如果有報錯,網上一般有解決方式:
1、通過conda安裝
2、使用pip進行安裝
3、通過GitHub進行安裝
首先將項目複製到本地:
然後進入文件中進行安裝:
下面通過一個案例來講解如何使用camelot。假設我們現在有一個只有一頁的PDF文件test.pdf:
1、先讀取文件
導出成csv格式的數據(方式1)
查看tables的相關信息:
導出方式2:
將數據轉換成DataFrame:
tabula的功能比camelot更加強大,可以同時對多個表格數據進行提取。項目的具體地址請參考:
tabula的安裝是非常簡單的:
安裝之後檢驗這個庫是否安裝成功:
通過tabula這個庫來讀取PDF文件:
然後我們發現列表中唯一的一個元素就是dataframe:
將讀取到的數據輸出成CSV格式的文件:
上面讀取的PDF文件是比較簡單的,只有一頁,而且剛好是一個很標準的表格形式的數據,下面看一個比較複雜的例子:
下面是第一頁,第一列可以看成是索引:
在第二頁中有兩份表格,而且中間有很多的空白行:
第三頁的數據比較標準:
這3頁是在同一個PDF文件中,這3頁是在同一個PDF文件中,這3頁是在同一個PDF文件中
上面的紅色提示中我們看到:當沒有指定pages參數的時候,只會默認讀取第一頁的數據,所以列表的長度為1。
轉成dataframe後將原來的索引變成新的一列 (部分數據)
通過pages來讀取全部數據:
通過指定pages=”all”:
同時獲取兩個表格的數據:
通過area參數來指定:
刪除在讀取的表格中我們不需要的欄位信息
可以將得到的數據輸出成不同格式的文件,以json格式為例:
我們可以看到
python怎樣讀取pdf文件的內容
1、首先要下載一個處理pdf的組件pdfminer,百度搜索去官網下載
2、下載完成解壓以後,打開cmd進入用命令安裝。python setup.py install 進行安裝
3、我們來測試一下是否安裝成功了,引入這個模塊,運行一下代碼,沒有報錯就說明安裝成功了
4、官網有文檔也有代碼示例
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
fp = open(‘mypdf.pdf’, ‘rb’)
#創建一個PDF文檔解析器對象
parser = PDFParser(fp)
#創建一個PDF文檔對象存儲文檔結構
#提供密碼初始化,沒有就不用傳該參數
document = PDFDocument(parser, password)
#檢查文件是否允許文本提取
if not document.is_extractable:
raise PDFTextExtractionNotAllowed
#創建一個PDF資源管理器對象來存儲共享資源
rsrcmgr = PDFResourceManager()
#創建一個pdf設備對象
device = PDFDevice(rsrcmgr)
#創建一個PDF解析器對象
interpreter = PDFPageInterpreter(rsrcmgr, device)
#處理文檔當中的每個頁面
for page in PDFPage.create_pages(document):
interpreter.process_page(page)
5、我新建一個pdf,新輸入一些內容
6、運行一下代碼即可
有沒有好一點的讀取pdf的python包
最近在做一些數據分析的任務,很多都是pdf文件,試過pdfminer,pypdf2。pdfminer可以較好地讀出裡面的文字內容,但是一旦碰到類似於表格的排版,就會分塊按列來讀,導致解析出來的結果排班很亂。比如下面圖片中的內容
解析出來是:
教育背景
2011.09-2015.06
重慶大學
工作經歷
軟體工程
而我預期的是:
教育背景
2011.09-2015.06 重慶大學 軟體工程
工作經歷
pypdf2效果更一般,很多中文字和符號都不能識別。Textract,Tika我也試過,都不行。請問大家有沒有更好的python PDF包呢?或者是我的處理方式不對?我的代碼如下:
from pdfminer.pdfinterp import PDFResourceManager, process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from io import StringIO
from io import open
from subprocess import call
def readPDF(pdfFile):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, laparams=laparams)
process_pdf(rsrcmgr, device, pdfFile, check_extractable=True)
device.close()
content = retstr.getvalue()
retstr.close()
return content
你可以試一下在線pdf裝換試試效果
效果好的話用再 selenium 來處理
在用其他包轉你需要的
我覺得你的那個包不好用是不是因為沒有那種字體啊?
原創文章,作者:IUHJA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/316900.html