iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0

這篇文章會介紹使用 Python 的 pdfplumber 第三方函式庫,讀取 pdf 的內容,將內容輸出儲存為純文字檔案,或將表格內容輸出為 CSV 檔。

原文參考:讀取 PDF 內容

本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )

Python 教學 - 讀取 pdf 內容

安裝 pdfplumber 函式庫

輸入下列指令安裝 pdfplumber,根據個人環境使用 pip 或 pip3。

!pip install pdfplumber

讀取 pdf 內容

使用 pdfplumber 開啟指定路徑中的 pdf 檔案後,讀取 pages 屬性內容,就能將 pdf 所有頁面回傳為串列格式 ( 範例 pdf 共有三頁 )。

下載:範例 pdf

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # Colab 換路徑使用

import pdfplumber
pdf = pdfplumber.open('oxxostudio.pdf')   # 開啟 pdf
print(pdf.pages)                          # [<Page:1>, <Page:2>, <Page:3>],共有三頁

透過 pages 讀取頁面串列後,使用讀取串列項目的方式開啟指定頁面,再藉由 extract_text() 方法讀取該頁面的文字內容

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # Colab 換路徑使用

import pdfplumber
pdf = pdfplumber.open('oxxostudio.pdf')
page = pdf.pages[0]           # 讀取第一頁
text = page.extract_text()    # 取出文字
print(text)

Python 教學 - 讀取 pdf 內容

如果頁面具有「表格」內容,使用 extract_table() 方法會將表格以「串列」方式表現 ( 範例 pdf 第二頁為表格 )。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # Colab 換路徑使用

import pdfplumber
pdf = pdfplumber.open('oxxostudio.pdf')
page = pdf.pages[1]           # 讀取第二頁
table = page.extract_table()  # 取出表格
print(table)
pdf.close()

Python 教學 - 讀取 pdf 內容

讀取加密 pdf

如果是加密的 pdf,可以在 open 時設定 password 參數,輸入密碼後就能開啟 pdf。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # Colab 換路徑使用

import pdfplumber
pdf = pdfplumber.open('test.pdf', password='12345678')   # 輸入密碼
page = pdf.pages[0]
text = page.extract_text()
print(table)
pdf.close()

讀取 pdf 內容儲存為純文字文件

參考「內建函式 ( 檔案讀寫 open )」文章,新增一個 test.txt 純文字文件,就能將讀取到的 pdf 寫入純文字文件中。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # Colab 換路徑使用

import pdfplumber
pdf = pdfplumber.open('oxxostudio.pdf')
page = pdf.pages[0]
text = page.extract_text()
print(text)
pdf.close()

f = open('test.txt','w+')   # 使用 w+ 模式開啟 test.txt
f.write(text)               # 寫入內容
f.close()                   # 關閉 test.txt

讀取 pdf 表格儲存為 CSV

參考「CSV 檔案操作」文章,新增一個 test-csv.csv 純文字文件,搭配 for 迴圈,就能將讀取到的 pdf 表格內容寫入 CSV 文件中。

import pdfplumber
pdf = pdfplumber.open('oxxostudio.pdf')
page = pdf.pages[1]
table = page.extract_table()
print(table)
pdf.close()

import csv
csvfile = open('test-csv.csv', 'w+')  # 建立 CSV 檔案
write = csv.writer(csvfile)           # 建立寫入物件
for i in table:
    write.writerow(i)                 # 讀取表格每一列寫入 CSV
print('ok')

Python 教學 - 讀取 pdf 內容

後記

本來想要使用 PyPDF2 讀取 pdf 內容,但發現雖然可以讀取 pdf,卻無法正確解析內容文字,後來才選擇 pdfplumber 作為 Python 讀取 pdf 內容的首選。

參考:https://github.com/jsvine/pdfplumber

更多 Python 教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 28 ) 定時自動螢幕截圖、LINE Notify 傳送截圖
下一篇
( Day 30 ) PDF 拆分、合併、插入、刪除、反轉
系列文
學 Python 到底可以幹麻勒?41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言