pdf是一種便攜式檔案格式,由Adobe公司設計,因為不受平臺限制,且方便保存和傳輸,所以pdf非常受歡迎,
目前市場上有很多pdf工具,大部分是閱讀類,也有支持對pdf的修改、轉換等功能,但這部分工具不少是收費的,但是如果要批量對pdf修改的話還是用代碼實作會比較好!
這次介紹一個開源python工具庫-pdfplumber,可以方便地獲取pdf的各種資訊,包括文本、表格、圖表、尺寸等,
pdfplumber在github上有英文官方檔案,后面我們會撿重點講解,先看下如何用pdfplumber提取pdf表格?
以NBA 2020-2021 常規賽資料作為范例,pdf表格如下:
第一步:使用pdfplumber提取表格文本
# 匯入pdfplumber
import pdfplumber
# 讀取pdf檔案,保存為pdf實體
pdf = pdfplumber.open("E:\\nba.pdf")
# 訪問第二頁
first_page = pdf.pages[1]
# 自動讀取表格資訊,回傳串列
table = first_page.extract_table()
table
輸出:
第二步:整理成dataframe格式,保存為excel
import pandas as pd
# 將串列轉為df
table_df = pd.DataFrame(table_2[1:],columns=table_2[0])
# 保存excel
table_df.to_excel('test.xlsx')
table_df
輸出:
一個小小的腳本,不到十行代碼,便將pdf表格提取并轉化為dataframe格式,最終保存到excel,
有個初步認知后,接下來詳細講講pdfplumber的安裝、匯入、api介面等資訊,
pdfplumber簡介
前面已經介紹過pdfplumber的用途,也用一個小案例展示了如何提取表格,我覺得對于pdfplumber只需要了解三點就可以,
1、它是一個純python第三方庫,適合python 3.x版本
2、它用來查看pdf各類資訊,能有效提取文本、表格
3、它不支持修改或生成pdf,也不支持對pdf掃描件的處理
Github地址https://github.com/jsvine/pdfplumber
pdfplumber安裝和匯入
同其他python庫一樣,pdfplumber支持使用pip安裝,在命令列輸入:
pip install pdfplumber
如果遇到安裝慢的問題,可以替換鏡像源,會快很多,
pdfplumber安裝后,用import匯入即可使用:
import pdfplumber
....
pdfplumber簡單使用
pdfplumber中有兩個基礎類,PDF和Page,看字面意思能猜出,前者是處理整個檔案,后者是處理頁面,
「pdfplumber.PDF類」
「pdfplumber.Page類」
這是pdfplumber的核心功能,對pdf的大部分操作都是基于這個類,包括提取文本、表格、尺寸等,
這里暫不一一列舉它的屬性和方法,
通過一個簡單的案例,就可以明白它們的作用,示例pdf檔案,共兩頁:
1.讀取pdf
# 匯入pdfplumber
import pdfplumber
# 讀取pdf檔案,回傳pdfplumber.PDF類的實體
pdf = pdfplumber.open("e:\\nba2.pdf")
2.獲取該pdf檔案的資訊
# 通過pdfplumber.PDF類的metadata屬性獲取pdf資訊
pdf.metadata
輸出:
這些是pdf的基礎資訊,包括作者、來源、日期等,
3.總頁數
# 通過pdfplumber.PDF類的metadata屬性獲取pdf頁數
len(pdf.pages)
4.讀取第一頁的頁寬、頁高等資訊
# 第一頁pdfplumber.Page實體
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實體
first_page = pdf.pages[1]
# 自動讀取表格資訊,回傳串列
table = first_page.extract_tables()
# 將串列轉為df
table_df = pd.DataFrame(table_2[1:],columns=table_2[0])
table_df
pdfplumber提取表格有很多的細節需要處理,這里給到的范例表格線框比較規范,所以能很簡單的提取,但對于線框不完全(包含無線框)的表格,其效果就差了不少,
在實際專案所需處理的pdf檔案中,線框完全及不完全的表格都比較多,為了能夠理解pdfplumber實作表格抽取的原理和方法,我們需要去細究相關引數的設定,
正如案例所示,pdfplumber.Page物件的.extract_table()方法可以提取表格,回傳從頁面上最大的表中提取的文本,以串列串列的形式顯示,結構為row -> cell,
「表格抽取引數設定」
默認情況下,extract_table使用頁面的垂直和水平線(或矩形邊緣)作為單元格分隔符,該方法可以通過table_settings引數進行高度自定義,可能的設定及其默認值:
{
"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支持對圖表進行可視化除錯,能輸出影像,顯示如何提取表,
pdfplumber的獨特之處
python中有很多庫可以處理pdf,比如PyPDF2、pdfminer等,那pdfplumber的優勢在哪呢?
首先,pdfplumber能輕松訪問有關PDF物件的所有詳細資訊,且用于提取文本和表格的方法高級可定制,使用者可根據表格的具體形式來調整引數,
最關鍵的是pdfplumber作者持續在維護該庫,而同樣受歡迎的PyPDF2已經不再維護了,
原始碼:https://pan.baidu.com/s/1COX_JUYeNxwvaMe4NFy6AA 提取碼: q3a7
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/265280.html
標籤:Python
