簡介
很多文件為了安全都會存成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的使用方法,可以去相關的官方文檔中查看。