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

一、準備工作:安裝必要的庫
首先需要安裝 Spire.PDF 庫。打開終端或命令行,執(zhí)行以下命令:
pip install Spire.PDF
如果你計劃將提取的數(shù)據導出為 Excel 格式,建議同時安裝 pandas 和 openpyxl:
pip install pandas openpyxl
二、核心代碼:提取 PDF 中的表格
下面的代碼演示了如何從 PDF 的第一頁提取表格,并逐行打印單元格內容:
from spire.pdf import PdfDocument, PdfTableExtractor
# 1. 加載 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile("sample.pdf")
# 2. 創(chuàng)建表格提取器
table_extractor = PdfTableExtractor(pdf)
# 3. 提取第一頁的所有表格
tables = table_extractor.ExtractTable(0)
# 4. 遍歷每個表格
for table in tables:
row_count = table.GetRowCount()
column_count = table.GetColumnCount()
# 逐行提取單元格內容
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)
代碼說明
| 方法 | 作用 |
|---|---|
LoadFromFile() | 加載指定路徑的 PDF 文件 |
PdfTableExtractor() | 創(chuàng)建表格提取器實例 |
ExtractTable(頁碼) | 提取指定頁面的所有表格,頁碼從 0 開始 |
GetRowCount() / GetColumnCount() | 獲取表格的行數(shù)和列數(shù) |
GetText(行, 列) | 獲取指定單元格的文本內容 |
三、進階處理:多頁 PDF 批量提取
如果 PDF 包含多個頁面,可以使用循環(huán)批量提取所有表格:
from spire.pdf import PdfDocument, PdfTableExtractor
pdf = PdfDocument()
pdf.LoadFromFile("multi_page_report.pdf")
# 遍歷所有頁面
for page_index in range(pdf.Pages.Count):
extractor = PdfTableExtractor(pdf)
tables = extractor.ExtractTable(page_index)
print(f"\n=== 第 {page_index + 1} 頁 共找到 {len(tables)} 個表格 ===")
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)
四、導出數(shù)據:保存為 CSV 或 Excel 文件
提取的表格數(shù)據可以方便地轉換為其他格式。以下示例將數(shù)據保存為 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ù)據
data = []
for i in range(rows):
row_data = [table.GetText(i, j) for j in range(cols)]
data.append(row_data)
# 寫入 CSV 文件
with open("output.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerows(data)
print(f"成功導出 {rows} 行 × {cols} 列 數(shù)據到 output.csv")
若想導出為 Excel 文件,可借助 pandas:
import pandas as pd
# 假設 data 是上面提取的二維列表
df = pd.DataFrame(data[1:], columns=data[0]) # 首行作為列標題
df.to_excel("output.xlsx", index=False)
print("數(shù)據已保存為 output.xlsx")五、常見問題與技巧
- 表格識別不完整? 檢查 PDF 中的表格是否有清晰的邊框,掃描件或圖片型 PDF 需要使用 OCR 技術,Spire.PDF 主要適用于文本型 PDF。
- 合并單元格處理 :Spire.PDF 會自動處理合并單元格,
GetText()會返回合并區(qū)域左上角單元格的內容,其他位置返回空字符串。 - 性能優(yōu)化 :處理大型 PDF 時,建議逐頁提取并即時保存,避免一次性加載全部表格到內存。
通過以上步驟,你已經掌握了使用 Python 提取 PDF 表格的完整流程。這個方案可以輕松集成到自動化數(shù)據處理流水線中,大幅提升工作效率。
到此這篇關于使用Python實現(xiàn)快速提取PDF中的表格的文章就介紹到這了,更多相關Python提取PDF表格內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用python和yolo方法實現(xiàn)yolo標簽自動標注
本文介紹了基于YOLOv10的自動標注方法,從初階的固定標注到高階的基于YOLO檢測結果的自動標注,兩者相比,高階方法顯著提高了標注的準確性,并減少了人工操作的時間,</P><P>2024-11-11
使用matplotlib在Python中繪制數(shù)據的詳細教程
Python 在處理數(shù)據方面非常出色,通常,數(shù)據集 會包括多個變量和許多實例,這使得很難理解數(shù)據的情況,數(shù)據可視化是幫助您識別數(shù)據模式的一種有用方式,本教程將描述如何使用 matplotlib 在 Python 中繪制數(shù)據,需要的朋友可以參考下2024-10-10

