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

Python實(shí)現(xiàn)高效提取PDF中的表格數(shù)據(jù)并導(dǎo)出為 TXT或Excel

 更新時(shí)間:2026年01月30日 08:12:27   作者:大尚來也  
在日常辦公、數(shù)據(jù)分析或信息歸檔過程中,我們經(jīng)常會遇到包含表格數(shù)據(jù)的 PDF 文件,本文將演示如何將 PDF 表格數(shù)據(jù)導(dǎo)出為 TXT 和 Excel 文件,有需要的小伙伴可以了解下

在日常辦公、數(shù)據(jù)分析或信息歸檔過程中,我們經(jīng)常會遇到包含表格數(shù)據(jù)的 PDF 文件。然而,PDF 本質(zhì)上是一種用于展示和打印的格式,并非為數(shù)據(jù)處理而設(shè)計(jì),因此直接從中提取結(jié)構(gòu)化數(shù)據(jù)頗具挑戰(zhàn)。幸運(yùn)的是,借助 Python 強(qiáng)大的生態(tài)工具,我們可以自動化地從 PDF 中識別并提取表格內(nèi)容,并將其保存為便于后續(xù)處理的 TXT 或 Excel(.xlsx)格式。

本文將介紹兩種主流且高效的開源庫——Tabula-pyCamelot-py,并通過完整示例演示如何將 PDF 表格數(shù)據(jù)導(dǎo)出為 TXT 和 Excel 文件。

一、準(zhǔn)備工作:安裝必要依賴

首先,確保你的系統(tǒng)已安裝 Java(Tabula 依賴 Java 運(yùn)行),然后通過 pip 安裝所需庫:

# 安裝 Tabula-py(基于 Java 的 Tabula 工具)
pip install tabula-py pandas openpyxl

# 或安裝 Camelot-py(基于 Ghostscript 和 OpenCV,更強(qiáng)大但配置稍復(fù)雜)
pip install camelot-py[cv] pandas openpyxl

注意:使用 Camelot 時(shí),Windows 用戶需額外安裝 Ghostscript 并將其添加到系統(tǒng) PATH。

二、方法一:使用 Tabula-py(簡單快捷)

Tabula-py 是對 Java 工具 Tabula 的 Python 封裝,適合處理結(jié)構(gòu)清晰、邊界線完整的表格。

示例:提取 PDF 表格并保存為 Excel 和 TXT

import tabula
import pandas as pd

# 指定 PDF 文件路徑
pdf_path = "example_table.pdf"

# 提取所有頁面的表格(返回 DataFrame 列表)
tables = tabula.read_pdf(pdf_path, pages="all", multiple_tables=True)

# 合并所有表格(或按需處理單個(gè))
combined_df = pd.concat(tables, ignore_index=True)

# 導(dǎo)出為 Excel
combined_df.to_excel("output.xlsx", index=False)

# 導(dǎo)出為 TXT(以制表符分隔)
combined_df.to_csv("output.txt", sep="\t", index=False, na_rep="")

print("表格已成功導(dǎo)出為 Excel 和 TXT 文件!")

優(yōu)點(diǎn):

  • 使用簡單,幾行代碼即可完成。
  • 對標(biāo)準(zhǔn)表格(有邊框線)識別準(zhǔn)確率高。

局限:

  • 對無邊框或布局復(fù)雜的表格支持較弱。
  • 依賴 Java 環(huán)境。

三、方法二:使用 Camelot-py(精準(zhǔn)靈活)

Camelot 提供了兩種解析模式:lattice(適用于有邊框的表格)和 stream(適用于無邊框但對齊良好的表格),靈活性更高。

示例:使用 Camelot 提取并導(dǎo)出

import camelot
import pandas as pd

pdf_path = "example_table.pdf"

# 使用 'lattice' 模式(有邊框表格)
tables = camelot.read_pdf(pdf_path, pages="all", flavor="lattice")

# 若表格無邊框,可嘗試:
# tables = camelot.read_pdf(pdf_path, pages="all", flavor="stream")

if tables:
    # 合并所有表格
    dfs = [table.df for table in tables]
    combined_df = pd.concat(dfs, ignore_index=True)

    # 清理列名(Camelot 默認(rèn)無列名,第一行為數(shù)據(jù))
    # 如需將第一行設(shè)為列名:
    # combined_df.columns = combined_df.iloc[0]
    # combined_df = combined_df[1:].reset_index(drop=True)

    # 導(dǎo)出
    combined_df.to_excel("camelot_output.xlsx", index=False)
    combined_df.to_csv("camelot_output.txt", sep="\t", index=False, header=False)

    print(f"成功提取 {len(tables)} 個(gè)表格,已保存為 Excel 和 TXT。")
else:
    print("未檢測到任何表格。")

優(yōu)點(diǎn):

  • 支持無邊框表格(stream 模式)。
  • 可可視化調(diào)試表格區(qū)域(tables[0].plot())。
  • 提供精度評估指標(biāo)(如 accuracy)。

局限:

  • 配置稍復(fù)雜,需安裝 Ghostscript。
  • 大文件處理速度略慢于 Tabula。

四、導(dǎo)出格式說明

  • Excel (.xlsx) :保留表格結(jié)構(gòu),支持多列、多行,適合后續(xù)分析(使用 pandas.DataFrame.to_excel)。
  • TXT (.txt) :通常以制表符(\t)或逗號分隔,輕量且兼容性強(qiáng)(使用 to_csv 并指定 sep)。

提示:若需保留原始換行或特殊字符,可在 to_csv 中設(shè)置 quoting=csv.QUOTE_ALL 或調(diào)整編碼(如 encoding='utf-8-sig')。

五、常見問題與優(yōu)化建議

表格識別不全?

  • 嘗試指定具體頁碼:pages="1,3,5"
  • 調(diào)整 Camelot 的 table_areas 參數(shù)手動劃定區(qū)域。

中文亂碼?

確保 PDF 使用標(biāo)準(zhǔn)字體;導(dǎo)出時(shí)指定 encoding='utf-8-sig'

性能優(yōu)化

  • 對于大批量 PDF,建議使用多進(jìn)程或異步處理。
  • 預(yù)處理 PDF(如裁剪、增強(qiáng)對比度)可提升識別率。

結(jié)語

Python 為 PDF 表格數(shù)據(jù)提取提供了強(qiáng)大而靈活的解決方案。Tabula-py 適合快速上手的標(biāo)準(zhǔn)表格,而 Camelot-py 則在復(fù)雜場景下表現(xiàn)更優(yōu)。結(jié)合 pandas 的數(shù)據(jù)處理能力,我們可以輕松將“不可編輯”的 PDF 表格轉(zhuǎn)化為結(jié)構(gòu)化的 TXT 或 Excel 文件,大幅提升數(shù)據(jù)再利用效率。

無論你是財(cái)務(wù)人員、數(shù)據(jù)分析師還是自動化開發(fā)者,掌握這些工具都將顯著簡化你的工作流程??煸囋嚢?!

到此這篇關(guān)于Python實(shí)現(xiàn)高效提取PDF中的表格數(shù)據(jù)并導(dǎo)出為 TXT或Excel的文章就介紹到這了,更多相關(guān)Python提取PDF表格數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析Git版本控制器使用

    淺析Git版本控制器使用

    本片文章主要給大家介紹了Git版本控制器的使用心得和技巧分享,需要的朋友學(xué)習(xí)參考下吧。
    2017-12-12
  • Python中使用裝飾器來優(yōu)化尾遞歸的示例

    Python中使用裝飾器來優(yōu)化尾遞歸的示例

    這里我們用典型的斐波那契數(shù)列作為例子,來展示Python中使用裝飾器來優(yōu)化尾遞歸的示例,需要的朋友可以參考下
    2016-06-06
  • Python散點(diǎn)圖與折線圖繪制過程解析

    Python散點(diǎn)圖與折線圖繪制過程解析

    這篇文章主要介紹了Python散點(diǎn)圖與折線圖繪制過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Pytorch中關(guān)于nn.Conv2d()參數(shù)的使用

    Pytorch中關(guān)于nn.Conv2d()參數(shù)的使用

    這篇文章主要介紹了Pytorch中關(guān)于nn.Conv2d()參數(shù)的使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • django之自定義軟刪除Model的方法

    django之自定義軟刪除Model的方法

    這篇文章主要介紹了django之自定義軟刪除Model的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 解決pandas使用read_csv()讀取文件遇到的問題

    解決pandas使用read_csv()讀取文件遇到的問題

    今天小編就為大家分享一篇解決pandas使用read_csv()讀取文件遇到的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python中__new__函數(shù)的具體使用

    python中__new__函數(shù)的具體使用

    new是object基類提供的內(nèi)置靜態(tài)方法,本文主要介紹了python中__new__函數(shù)的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-09-09
  • python中字符串類型json操作的注意事項(xiàng)

    python中字符串類型json操作的注意事項(xiàng)

    這篇文章主要給大家介紹了python中字符串類型json操作的一些注意事項(xiàng),文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • pandas溫差查詢案例的實(shí)現(xiàn)

    pandas溫差查詢案例的實(shí)現(xiàn)

    本文主要介紹了pandas溫差查詢案例的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python tkinter庫實(shí)現(xiàn)登錄注冊基本功能

    Python tkinter庫實(shí)現(xiàn)登錄注冊基本功能

    Python自帶了tkinter模塊,實(shí)質(zhì)上是一種流行的面向?qū)ο蟮腉UI工具包 TK 的Python編程接口,提供了快速便利地創(chuàng)建GUI應(yīng)用程序的方法,下面這篇文章主要給大家介紹了關(guān)于tkinter庫制作一個(gè)簡單的登錄注冊小程序,需要的朋友可以參考下
    2022-12-12

最新評論

丹东市| 封开县| 和政县| 临沭县| 香港 | 紫金县| 应城市| 榆林市| 腾冲县| 清丰县| 青冈县| 青岛市| 罗田县| 通化市| 嘉兴市| 乐清市| 曲阳县| 卢氏县| 侯马市| 同心县| 平顶山市| 石首市| 阜新市| 沾化县| 桃源县| 沿河| 蒙自县| 五寨县| 乌拉特后旗| 佛坪县| 万州区| 黔江区| 荆门市| 五寨县| 甘孜| 昭觉县| 兰考县| 沅陵县| 蛟河市| 石门县| 岑溪市|