使用Python實(shí)現(xiàn)快速提取PDF中的表格
在數(shù)據(jù)分析工作中,我們經(jīng)常遇到需要從 PDF 文件中提取表格數(shù)據(jù)的場(chǎng)景。然而,直接復(fù)制 PDF 中的表格往往會(huì)導(dǎo)致格式混亂、數(shù)據(jù)錯(cuò)位。本文將手把手教你使用 Spire.PDF for Python 庫(kù),快速準(zhǔn)確地識(shí)別并提取 PDF 中的表格,并將數(shù)據(jù)保存為 CSV、Excel 等常用格式。

一、準(zhǔn)備工作:安裝必要的庫(kù)
首先需要安裝 Spire.PDF 庫(kù)。打開(kāi)終端或命令行,執(zhí)行以下命令:
pip install Spire.PDF
如果你計(jì)劃將提取的數(shù)據(jù)導(dǎo)出為 Excel 格式,建議同時(shí)安裝 pandas 和 openpyxl:
pip install pandas openpyxl
二、核心代碼:提取 PDF 中的表格
下面的代碼演示了如何從 PDF 的第一頁(yè)提取表格,并逐行打印單元格內(nèi)容:
from spire.pdf import PdfDocument, PdfTableExtractor
# 1. 加載 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile("sample.pdf")
# 2. 創(chuàng)建表格提取器
table_extractor = PdfTableExtractor(pdf)
# 3. 提取第一頁(yè)的所有表格
tables = table_extractor.ExtractTable(0)
# 4. 遍歷每個(gè)表格
for table in tables:
row_count = table.GetRowCount()
column_count = table.GetColumnCount()
# 逐行提取單元格內(nèi)容
for i in range(row_count):
row_data = []
for j in range(column_count):
cell_text = table.GetText(i, j)
row_data.append(cell_text)
print(row_data)
代碼說(shuō)明
| 方法 | 作用 |
|---|---|
LoadFromFile() | 加載指定路徑的 PDF 文件 |
PdfTableExtractor() | 創(chuàng)建表格提取器實(shí)例 |
ExtractTable(頁(yè)碼) | 提取指定頁(yè)面的所有表格,頁(yè)碼從 0 開(kāi)始 |
GetRowCount() / GetColumnCount() | 獲取表格的行數(shù)和列數(shù) |
GetText(行, 列) | 獲取指定單元格的文本內(nèi)容 |
三、進(jìn)階處理:多頁(yè) PDF 批量提取
如果 PDF 包含多個(gè)頁(yè)面,可以使用循環(huán)批量提取所有表格:
from spire.pdf import PdfDocument, PdfTableExtractor
pdf = PdfDocument()
pdf.LoadFromFile("multi_page_report.pdf")
# 遍歷所有頁(yè)面
for page_index in range(pdf.Pages.Count):
extractor = PdfTableExtractor(pdf)
tables = extractor.ExtractTable(page_index)
print(f"\n=== 第 {page_index + 1} 頁(yè) 共找到 {len(tables)} 個(gè)表格 ===")
for t, table in enumerate(tables):
print(f"--- 表格 {t+1} ---")
rows = table.GetRowCount()
cols = table.GetColumnCount()
for i in range(rows):
row = [table.GetText(i, j) for j in range(cols)]
print(row)
四、導(dǎo)出數(shù)據(jù):保存為 CSV 或 Excel 文件
提取的表格數(shù)據(jù)可以方便地轉(zhuǎn)換為其他格式。以下示例將數(shù)據(jù)保存為 CSV 文件:
import csv
from spire.pdf import PdfDocument, PdfTableExtractor
pdf = PdfDocument()
pdf.LoadFromFile("sample.pdf")
extractor = PdfTableExtractor(pdf)
tables = extractor.ExtractTable(0)
if tables:
table = tables[0]
rows = table.GetRowCount()
cols = table.GetColumnCount()
# 收集所有數(shù)據(jù)
data = []
for i in range(rows):
row_data = [table.GetText(i, j) for j in range(cols)]
data.append(row_data)
# 寫(xiě)入 CSV 文件
with open("output.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerows(data)
print(f"成功導(dǎo)出 {rows} 行 × {cols} 列 數(shù)據(jù)到 output.csv")
若想導(dǎo)出為 Excel 文件,可借助 pandas:
import pandas as pd
# 假設(shè) data 是上面提取的二維列表
df = pd.DataFrame(data[1:], columns=data[0]) # 首行作為列標(biāo)題
df.to_excel("output.xlsx", index=False)
print("數(shù)據(jù)已保存為 output.xlsx")五、常見(jiàn)問(wèn)題與技巧
- 表格識(shí)別不完整? 檢查 PDF 中的表格是否有清晰的邊框,掃描件或圖片型 PDF 需要使用 OCR 技術(shù),Spire.PDF 主要適用于文本型 PDF。
- 合并單元格處理 :Spire.PDF 會(huì)自動(dòng)處理合并單元格,
GetText()會(huì)返回合并區(qū)域左上角單元格的內(nèi)容,其他位置返回空字符串。 - 性能優(yōu)化 :處理大型 PDF 時(shí),建議逐頁(yè)提取并即時(shí)保存,避免一次性加載全部表格到內(nèi)存。
通過(guò)以上步驟,你已經(jīng)掌握了使用 Python 提取 PDF 表格的完整流程。這個(gè)方案可以輕松集成到自動(dòng)化數(shù)據(jù)處理流水線中,大幅提升工作效率。
到此這篇關(guān)于使用Python實(shí)現(xiàn)快速提取PDF中的表格的文章就介紹到這了,更多相關(guān)Python提取PDF表格內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python實(shí)現(xiàn)一鍵提取PDF文件中的文本、表格和圖片
- 零基礎(chǔ)上手使用Python?pdfplumber提取原生PDF表格
- Python實(shí)現(xiàn)高效提取PDF中的表格數(shù)據(jù)并導(dǎo)出為 TXT或Excel
- 通過(guò)Python提取PDF表格數(shù)據(jù)的流程步驟
- Python提取PDF表格數(shù)據(jù)并導(dǎo)出為T(mén)XT、Excel?格式
- Python利用PaddleOCR進(jìn)行掃描版PDF的跨頁(yè)表格提取與合并
- 使用Python將PDF表格自動(dòng)提取并寫(xiě)入Word文檔表格
- Python PDF識(shí)別之文本內(nèi)容與表格提取方法總結(jié)
相關(guān)文章
使用python和yolo方法實(shí)現(xiàn)yolo標(biāo)簽自動(dòng)標(biāo)注
本文介紹了基于YOLOv10的自動(dòng)標(biāo)注方法,從初階的固定標(biāo)注到高階的基于YOLO檢測(cè)結(jié)果的自動(dòng)標(biāo)注,兩者相比,高階方法顯著提高了標(biāo)注的準(zhǔn)確性,并減少了人工操作的時(shí)間,</P><P>2024-11-11
python 將列表中的字符串連接成一個(gè)長(zhǎng)路徑的方法
今天小編就為大家分享一篇python 將列表中的字符串連接成一個(gè)長(zhǎng)路徑的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
Python3非對(duì)稱加密算法RSA實(shí)例詳解
這篇文章主要介紹了Python3非對(duì)稱加密算法RSA,結(jié)合實(shí)例形式分析了Python3 RSA加密相關(guān)模塊安裝及使用操作技巧,需要的朋友可以參考下2018-12-12
python函數(shù)運(yùn)行內(nèi)存時(shí)間等性能檢測(cè)工具
這篇文章主要為大家介紹了python函數(shù)運(yùn)行內(nèi)存時(shí)間等性能檢測(cè)工具,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
基于pycharm 項(xiàng)目和項(xiàng)目文件命名規(guī)則的介紹
這篇文章主要介紹了基于pycharm 項(xiàng)目和項(xiàng)目文件命名規(guī)則的介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
python實(shí)現(xiàn)屏保程序(適用于背單詞)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)屏保程序,適用于背單詞,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
Python2與Python3的區(qū)別點(diǎn)整理
在本篇文章里小編給大家整理的是關(guān)于Python2與Python3的區(qū)別點(diǎn)整理內(nèi)容,需要的朋友們可以參考下。2019-12-12
使用matplotlib在Python中繪制數(shù)據(jù)的詳細(xì)教程
Python 在處理數(shù)據(jù)方面非常出色,通常,數(shù)據(jù)集 會(huì)包括多個(gè)變量和許多實(shí)例,這使得很難理解數(shù)據(jù)的情況,數(shù)據(jù)可視化是幫助您識(shí)別數(shù)據(jù)模式的一種有用方式,本教程將描述如何使用 matplotlib 在 Python 中繪制數(shù)據(jù),需要的朋友可以參考下2024-10-10

