Python提取PDF文字資料
阿新 • • 發佈:2021-08-24
很多檔案為了安全都會存成pdf格式,如論文、技術文件、書籍等,而通過程式從pdf文件中提取對應的文字內容比較麻煩。在Python中,用於解析pdf檔案的擴充套件包有很多,常用的有pdfminer3k、PyPDF2、Camelot、pdfplumber等。本文主要介紹如何使用pdfplumber庫來解析pdf檔案。
檔案
簡介
很多檔案為了安全都會存成pdf格式,如論文、技術文件、書籍等,而通過程式從pdf文件中提取對應的文字內容比較麻煩。在Python中,用於解析pdf檔案的擴充套件包有很多,常用的有pdfminer3k、PyPDF2、Camelot、pdfplumber等。本文主要介紹如何使用pdfplumber庫來解析pdf檔案。
pdfplumber最適合提取電腦生成的pdf,而不是掃描出來的pdf。它是在pdfminer和pdfminer.six的基礎上設計的。
安裝
pip3 install pdfplumber
或
python3 -m pip install pdfplumber
執行
有如下pep8.pdf
我們可以通過pdfplumber來提取以上pdf檔案的文字資訊。
import pdfplumber
with pdfplumber.open("pep8.pdf") as pdf:
print(pdf.pages) # Page物件列表
結果如下
[<Page:1>, <Page:2>, <Page:3>, <Page:4>, <Page:5>, <Page:6>, <Page:7>, <Page:8>, <Page:9>, <Page:10>, <Page:11>, <Page:12>, <Page:13>, <Page:14>, <Page:15>, <Page:16>, <Page:17>]
上面的pdf.pages
代表pdf檔案中每頁(共17頁)的物件列表。
我們來提取第一頁的文字資訊
import pdfplumber
with pdfplumber.open("pep8.pdf") as pdf:
page = pdf.pages[0]
print(page.extract_text()) # 提取文字
結果如下
Python PEP8 編碼規範 中文版 原文連結:http://legacy.python.org/dev/peps/pep-0008/ PEP 8 Title Style Guide for Python Code Version c451868df657 Last-Modified 2016-06-08 10:43:53 -0400 (Wed, 08 Jun 2016) Author Guido van Rossum <guido at python.org>, Barry Warsaw <barry at python.org>, Nick Coghlan <ncoghlan at gmail.co m> Status Active Type Process Content-Type: text/x-rst Created 05-Jul-2001 Post-History 05-Jul-2001, 01-Aug-2013 Introduction 介紹 本文提供的Python程式碼編碼規範基於Python主要發行版本的標準庫。Python的C語言實現的C程式碼規範請檢視相應的PEP指南[1]。 這篇文件以及PEP 257(文件字串的規範)改編自Guido原始的《Python Style Guide》一文,同時添加了一些來自Barry的風格指南[2]。 這篇規範指南隨著時間的推移而逐漸演變,隨著語言本身的變化,過去的約定也被淘汰了。 許多專案有自己的編碼規範,在出現規範衝突時,專案自身的規範優先。 A Foolish Consistency is the Hobgoblin of Little Minds 盡信書,則不如無書 Guido的一條重要的見解是程式碼閱讀比寫更加頻繁。這裡提供的指導原則主要用於提升程式碼的可讀性,使得在大量的Python程式碼中保持一致。 就像PEP 20提到的,“Readability counts”。 這是一份關於一致性的風格指南。這份風格指南的風格一致性是非常重要的。更重要的是專案的風格一致性。在一個模組或函式的風格一致性 是最重要的。 然而,應該知道什麼時候應該不一致,有時候編碼規範的建議並不適用。當存在模稜兩可的情況時,使用自己的判斷。看看其他的示例再決定 哪一種是最好的,不要羞於發問。 特別是不要為了遵守PEP約定而破壞相容性! 幾個很好的理由去忽略特定的規則: 1. 當遵循這份指南之後程式碼的可讀性變差,甚至是遵循PEP規範的人也覺得可讀性差。 2. 與周圍的程式碼保持一致(也可能出於歷史原因),儘管這也是清理他人混亂(真正的Xtreme Programming風格)的一個機會。 3. 有問題的程式碼出現在發現編碼規範之前,而且也沒有充足的理由去修改他們。 4. 當代碼需要相容不支援編碼規範建議的老版本Python。 Code lay-out 程式碼佈局 Indentation 縮排 每一級縮排使用4個空格。 續行應該與其包裹元素對齊,要麼使用圓括號、方括號和花括號內的隱式行連線來垂直對齊,要麼使用掛行縮排對齊[7]。當使用掛行縮排時, 應該考慮到第一行不應該有引數,以及使用縮排以區分自己是續行。
如果只想提取第一頁中的表格資訊,則可以用以下方法
import pdfplumber
with pdfplumber.open("pep8.pdf") as pdf:
page = pdf.pages[0]
for row in page.extract_table():
print(row)
結果如下
['PEP', '8']
['Title', 'Style Guide for Python Code']
['Version', 'c451868df657']
['Last-Modified', '2016-06-08 10:43:53 -0400 (Wed, 08 Jun 2016)']
['Author', 'Guido van Rossum <guido at python.org>, Barry Warsaw\n<barry at python.org>, Nick Coghlan <ncoghlan at gmail.co\nm>']
['Status', 'Active']
['Type', 'Process']
['Content-Type:', 'text/x-rst']
['Created', '05-Jul-2001']
['Post-History', '05-Jul-2001, 01-Aug-2013']
extract_table()
會返回一個包含表格資料的巢狀列表。
其他常用的提取方法
.extract_text()
用來提頁面中的文字,將頁面的所有字元物件整理為的那個字串.extract_words()
返回的是所有的單詞及其相關資訊.extract_tables()
提取頁面的所有表格.to_image()
用於視覺化除錯時,返回PageImage類的一個例項(使用此方法需要安裝視覺化除錯工具ImageMagick)
總結
pdfplumber是一個很強大的pdf解析工具包,上面也只是簡單的介紹了其中一部分功能,如果想了解更多關於pdfplumber的使用方法,可以去相關的官方文件中檢視。