最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python實(shí)現(xiàn)快速提取PDF中的表格

 更新時(shí)間:2026年06月01日 11:15:17   作者:秋天的落葉鋪滿小路  
在數(shù)據(jù)分析工作中,我們經(jīng)常遇到需要從 PDF 文件中提取表格數(shù)據(jù)的場(chǎng)景,本文將手把手教你使用?Spire.PDF for Python?庫(kù),快速準(zhǔn)確地識(shí)別并提取 PDF 中的表格,并將數(shù)據(jù)保存為 CSV、Excel 等常用格式

在數(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)題與技巧

  1. 表格識(shí)別不完整? 檢查 PDF 中的表格是否有清晰的邊框,掃描件或圖片型 PDF 需要使用 OCR 技術(shù),Spire.PDF 主要適用于文本型 PDF。
  2. 合并單元格處理 :Spire.PDF 會(huì)自動(dòng)處理合并單元格,GetText() 會(huì)返回合并區(qū)域左上角單元格的內(nèi)容,其他位置返回空字符串。
  3. 性能優(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python和yolo方法實(shí)現(xiàn)yolo標(biāo)簽自動(dòng)標(biāo)注

    使用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多線程編程

    深入理解python多線程編程

    進(jìn)程是資源分配的最小單位,他是操作系統(tǒng)進(jìn)行資源分配和調(diào)度運(yùn)行的基本單位。通俗理解:一個(gè)正在運(yùn)行的一個(gè)程序就是一個(gè)進(jìn)程,本文重點(diǎn)給大家介紹python多線程編程的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-04-04
  • python 將列表中的字符串連接成一個(gè)長(zhǎng)路徑的方法

    python 將列表中的字符串連接成一個(gè)長(zhǎng)路徑的方法

    今天小編就為大家分享一篇python 將列表中的字符串連接成一個(gè)長(zhǎng)路徑的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Python3非對(duì)稱加密算法RSA實(shí)例詳解

    Python3非對(duì)稱加密算法RSA實(shí)例詳解

    這篇文章主要介紹了Python3非對(duì)稱加密算法RSA,結(jié)合實(shí)例形式分析了Python3 RSA加密相關(guān)模塊安裝及使用操作技巧,需要的朋友可以參考下
    2018-12-12
  • Python離線安裝第三方庫(kù)詳細(xì)操作流程

    Python離線安裝第三方庫(kù)詳細(xì)操作流程

    在使用Python開(kāi)發(fā)過(guò)程中,我們經(jīng)常需要使用各種第三方庫(kù)來(lái)擴(kuò)展Python的功能,這篇文章主要給大家介紹了關(guān)于Python離線安裝第三方庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • python函數(shù)運(yùn)行內(nèi)存時(shí)間等性能檢測(cè)工具

    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ī)則的介紹

    這篇文章主要介紹了基于pycharm 項(xiàng)目和項(xiàng)目文件命名規(guī)則的介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • python實(shí)現(xiàn)屏保程序(適用于背單詞)

    python實(shí)現(xiàn)屏保程序(適用于背單詞)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)屏保程序,適用于背單詞,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python2與Python3的區(qū)別點(diǎn)整理

    Python2與Python3的區(qū)別點(diǎn)整理

    在本篇文章里小編給大家整理的是關(guān)于Python2與Python3的區(qū)別點(diǎn)整理內(nèi)容,需要的朋友們可以參考下。
    2019-12-12
  • 使用matplotlib在Python中繪制數(shù)據(jù)的詳細(xì)教程

    使用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

最新評(píng)論

鱼台县| 松滋市| 怀集县| 桂林市| 石家庄市| 林周县| 紫金县| 丰宁| 舞钢市| 蒙山县| 镇安县| 久治县| 平遥县| 阿克陶县| 梅州市| 济源市| 灵川县| 宝丰县| 北票市| 涞水县| 区。| 宁南县| 平潭县| 宣武区| 伊金霍洛旗| 甘泉县| 义马市| 土默特左旗| 泗阳县| 林周县| 苍山县| 寻甸| 济阳县| 务川| 定陶县| 锡林浩特市| 唐山市| 永安市| 无棣县| 元阳县| 剑川县|