Python实现高效提取PDF中的表格数据并导出为 TXT或Excel

 更新时间:2026年01月30日 08:12:27   作者:大尚来也  
在日常办公、数据分析或信息归档过程中,我们经常会遇到包含表格数据的 PDF 文件,本文将演示如何将 PDF 表格数据导出为 TXT 和 Excel 文件,有需要的小伙伴可以了解下

在日常办公、数据分析或信息归档过程中,我们经常会遇到包含表格数据的 PDF 文件。然而,PDF 本质上是一种用于展示和打印的格式,并非为数据处理而设计,因此直接从中提取结构化数据颇具挑战。幸运的是,借助 Python 强大的生态工具,我们可以自动化地从 PDF 中识别并提取表格内容,并将其保存为便于后续处理的 TXT 或 Excel(.xlsx)格式。

本文将介绍两种主流且高效的开源库——Tabula-pyCamelot-py,并通过完整示例演示如何将 PDF 表格数据导出为 TXT 和 Excel 文件。

一、准备工作:安装必要依赖

首先,确保你的系统已安装 Java(Tabula 依赖 Java 运行),然后通过 pip 安装所需库:

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

# 或安装 Camelot-py(基于 Ghostscript 和 OpenCV,更强大但配置稍复杂)
pip install camelot-py[cv] pandas openpyxl

注意:使用 Camelot 时,Windows 用户需额外安装 Ghostscript 并将其添加到系统 PATH。

二、方法一:使用 Tabula-py(简单快捷)

Tabula-py 是对 Java 工具 Tabula 的 Python 封装,适合处理结构清晰、边界线完整的表格。

示例:提取 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)

# 合并所有表格(或按需处理单个)
combined_df = pd.concat(tables, ignore_index=True)

# 导出为 Excel
combined_df.to_excel("output.xlsx", index=False)

# 导出为 TXT(以制表符分隔)
combined_df.to_csv("output.txt", sep="\t", index=False, na_rep="")

print("表格已成功导出为 Excel 和 TXT 文件!")

优点:

  • 使用简单,几行代码即可完成。
  • 对标准表格(有边框线)识别准确率高。

局限:

  • 对无边框或布局复杂的表格支持较弱。
  • 依赖 Java 环境。

三、方法二:使用 Camelot-py(精准灵活)

Camelot 提供了两种解析模式:lattice(适用于有边框的表格)和 stream(适用于无边框但对齐良好的表格),灵活性更高。

示例:使用 Camelot 提取并导出

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 默认无列名,第一行为数据)
    # 如需将第一行设为列名:
    # combined_df.columns = combined_df.iloc[0]
    # combined_df = combined_df[1:].reset_index(drop=True)

    # 导出
    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)} 个表格,已保存为 Excel 和 TXT。")
else:
    print("未检测到任何表格。")

优点:

  • 支持无边框表格(stream 模式)。
  • 可可视化调试表格区域(tables[0].plot())。
  • 提供精度评估指标(如 accuracy)。

局限:

  • 配置稍复杂,需安装 Ghostscript。
  • 大文件处理速度略慢于 Tabula。

四、导出格式说明

  • Excel (.xlsx) :保留表格结构,支持多列、多行,适合后续分析(使用 pandas.DataFrame.to_excel)。
  • TXT (.txt) :通常以制表符(\t)或逗号分隔,轻量且兼容性强(使用 to_csv 并指定 sep)。

提示:若需保留原始换行或特殊字符,可在 to_csv 中设置 quoting=csv.QUOTE_ALL 或调整编码(如 encoding='utf-8-sig')。

五、常见问题与优化建议

表格识别不全?

  • 尝试指定具体页码:pages="1,3,5"
  • 调整 Camelot 的 table_areas 参数手动划定区域。

中文乱码?

确保 PDF 使用标准字体;导出时指定 encoding='utf-8-sig'

性能优化

  • 对于大批量 PDF,建议使用多进程或异步处理。
  • 预处理 PDF(如裁剪、增强对比度)可提升识别率。

结语

Python 为 PDF 表格数据提取提供了强大而灵活的解决方案。Tabula-py 适合快速上手的标准表格,而 Camelot-py 则在复杂场景下表现更优。结合 pandas 的数据处理能力,我们可以轻松将“不可编辑”的 PDF 表格转化为结构化的 TXT 或 Excel 文件,大幅提升数据再利用效率。

无论你是财务人员、数据分析师还是自动化开发者,掌握这些工具都将显著简化你的工作流程。快试试吧!

到此这篇关于Python实现高效提取PDF中的表格数据并导出为 TXT或Excel的文章就介绍到这了,更多相关Python提取PDF表格数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python机器学习应用之工业蒸汽数据分析篇详解

    Python机器学习应用之工业蒸汽数据分析篇详解

    本篇文章介绍了如何用Python进行工业蒸汽数据分析的过程及思路,通读本篇对大家的学习或工作具有一定的价值,需要的朋友可以参考下
    2022-01-01
  • PyHacker编写指南引用Nmap模块实现端口扫描器

    PyHacker编写指南引用Nmap模块实现端口扫描器

    这篇文章主要为大家介绍了PyHacker编写指南Nmap模块实现端口扫描,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python获取江苏疫情实时数据及爬虫分析

    Python获取江苏疫情实时数据及爬虫分析

    为了关注疫情状况,今天我们用python来爬一爬疫情的实时数据,本文通过实例图文相结合给大家介绍的非常详细,需要的朋友参考下吧
    2021-08-08
  • Python中可复用函数的6种实践

    Python中可复用函数的6种实践

    为了实现可维护性,我们的Python函数应该:小型、只做一项任务;没有重复;有一个层次的抽象性;有一个描述性的名字和有少于四个参数,下面我们就来看看这6个特性的实践吧
    2023-08-08
  • python3 中时间戳、时间、日期的转换和加减操作

    python3 中时间戳、时间、日期的转换和加减操作

    这篇文章主要介绍了python3 中时间戳、时间、日期的转换和加减操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • python执行get提交的方法

    python执行get提交的方法

    这篇文章主要介绍了python执行get提交的方法,实例分析了Python通过get传递数据的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • 基于django传递数据到后端的例子

    基于django传递数据到后端的例子

    今天小编就为大家分享一篇基于django传递数据到后端的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • tensorflow 初始化未初始化的变量实例

    tensorflow 初始化未初始化的变量实例

    今天小编就为大家分享一篇tensorflow 初始化未初始化的变量实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 使用pytorch 筛选出一定范围的值

    使用pytorch 筛选出一定范围的值

    这篇文章主要介绍了使用pytorch 筛选出一定范围的值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python高效生成requirements.txt的两种方法

    Python高效生成requirements.txt的两种方法

    Python项目依赖管理是开发流程中的关键环节,requirements.txt文件作为记录项目依赖的标准方式,能确保环境一致性并简化协作部署流程,掌握其生成方法对开发者至关重要,本文给大家介绍了两种高效生成requirements.txt的方法,需要的朋友可以参考下
    2025-12-12

最新评论