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

Written by

in

文章目录
  • 首先,确保你的系统已安装 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 是对 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 提供了两种解析模式: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提取PDF表格数据并导出为TXT、Excel 格式 使用Python将Word文档导出为PDF格式并从Word文档中提取数据 Python利用pdfplumber提取PDF文档中的表格数据并导出 Python利用pdfplumber库提取pdf中表格数据 如何利用Python提取pdf中的表格数据(附实战案例) python用pdfplumber提取pdf表格数据并保存到excel文件中 python pdfplumber库批量提取pdf表格数据转换为excel python从PDF中提取数据的示例 Python 用三行代码提取PDF表格数据
  • 目录
    • 一、准备工作:安装必要依赖
    • 二、方法一:使用 Tabula-py(简单快捷)
    • 三、方法二:使用 Camelot-py(精准灵活)
    • 四、导出格式说明
    • 五、常见问题与优化建议
    • 结语

    在日常办公、数据分析或信息归档过程中,我们经常会遇到包含表格数据的 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 是对 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 提供了两种解析模式: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提取PDF表格数据并导出为TXT、Excel 格式
    • 使用Python将Word文档导出为PDF格式并从Word文档中提取数据
    • Python利用pdfplumber提取PDF文档中的表格数据并导出
    • Python利用pdfplumber库提取pdf中表格数据
    • 如何利用Python提取pdf中的表格数据(附实战案例)
    • python用pdfplumber提取pdf表格数据并保存到excel文件中
    • python pdfplumber库批量提取pdf表格数据转换为excel
    • python从PDF中提取数据的示例
    • Python 用三行代码提取PDF表格数据

    站内搜索