展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 编程开发 > Python实现PDF表格转CSV的完整方法与代码解析

Python实现PDF表格转CSV的完整方法与代码解析

利用FreeSpire.PDFforPython解析PDF表格,结合Python内置csv库导出CSV。支持单页或多页PDF,自动按页面与表格编号拆分生成UTF-8编码CSV文件。通过遍历页面、提取表格、读取单元格文本并清洗,最终写入CSV。该方法代码清晰,适用于自动化数据处理。

PDF 格式因其版式固定性而广泛用于文档交换,但也导致结构化数据(如表格)难以直接抽取。尽管存在多种解析方案(如基于文本坐标启发式或 OCR),但对于具有明确边框和单元格边界的表格,专用表格提取器能提供更高的准确度。本文将介绍如何使用免费库 Free Spire.PDF for Python 解析 PDF 表格,并结合 Python 内置 csv 标准库完成数据导出。

Python实现PDF表格转CSV的完整方法与代码解析

一、环境准备

1. 依赖库安装

本次实现依赖 PDF 解析组件与 Python 原生库,执行以下命令安装免费版 PDF 解析组件:

pip install Spire.Pdf.Free

2. 技术说明

  • 核心依赖:spire.pdf.free 负责识别、提取 PDF 中的表格结构与单元格数据;
  • 文件导出:使用 Python 内置 csvos 标准库完成目录创建、CSV 写入,无需额外第三方数据处理库;
  • 适用场景:支持单页/多页 PDF、单页多表格场景,可自动按页面+表格序号拆分输出文件;
  • 兼容性:导出 UTF-8 编码 CSV,可直接用 Excel、WPS、Pandas 等工具读取。

二、核心实现思路

  1. 初始化 PDF 文档对象,加载本地 PDF 文件;
  2. 创建表格提取器,绑定已加载的 PDF 文档;
  3. 遍历 PDF 所有页面,逐页提取当前页面内的全部表格;
  4. 针对每个表格,逐行、逐列读取单元格文本,并做基础文本清洗;
  5. 自动创建输出目录,将单张表格数据写入独立 CSV 文件,文件按页面、表格编号命名;
  6. 执行资源释放操作,释放 PDF 文档占用的内存与文件流。

三、完整代码实现

该示例完整还原逐页、逐表提取逻辑,自动创建输出目录,每个表格单独生成 CSV 文件,附带文本清洗逻辑:

from spire.pdf import PdfDocument, PdfTableExtractor
import csv
import os

# 初始化PDF文档对象并加载文件
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")

# 创建PDF表格提取器
extractor = PdfTableExtractor(pdf)

# 定义输出目录,目录不存在则自动创建
output_root = "Tables"
os.makedirs(output_root, exist_ok=True)

# 遍历PDF每一页
for page_index in range(pdf.Pages.Count):
    # 提取当前页面下所有表格
    tables = extractor.ExtractTable(page_index)
    
    # 遍历当前页面中的每一个表格
    for table_index, table in enumerate(tables):
        table_data = []
        
        # 读取表格所有行
        row_total = table.GetRowCount()
        for row in range(row_total):
            row_data = []
            # 读取当前行所有列
            col_total = table.GetColumnCount()
            for col in range(col_total):
                # 提取单元格文本,去除换行符、首尾空白字符
                cell_text = table.GetText(row, col).replace("n", "").strip()
                row_data.append(cell_text)
            table_data.append(row_data)
        
        # 拼接CSV文件路径,按 页面-表格 编号命名
        csv_name = f"Page{page_index + 1}-Table{table_index + 1}.csv"
        csv_path = os.path.join(output_root, csv_name)
        
        # 写入CSV文件,指定UTF-8编码,newline避免多余空行
        with open(csv_path, "w", newline="", encoding="utf-8") as csvfile:
            writer = csv.writer(csvfile)
            writer.writerows(table_data)
        print(f"已导出:{csv_path}")

# 释放PDF文档资源
pdf.Dispose()
print("所有表格导出完成")

四、代码解析

4.1 核心类说明

  • PdfDocument:PDF 文档操作主类,LoadFromFile() 用于加载本地 PDF 文件,Pages.Count 获取文档总页数,Dispose() 用于释放文件流、内存等资源,批量处理文件时必须调用,防止内存堆积。
  • PdfTableExtractor:专用表格提取器,依赖已加载的 PdfDocument 对象初始化;ExtractTable(page_index) 接收页码索引,返回当前页面内所有表格对象集合。

4.2 表格数据读取方法

  • GetRowCount():获取当前表格的总行数;
  • GetColumnCount():获取当前行的总列数;
  • GetText(row, col):根据行、列索引读取单元格原始文本。

4.3 文本清洗逻辑

replace("n", "").strip() 是实用的预处理逻辑:

  • 去除单元格内的换行符,避免 CSV 格式错乱;
  • 清除文本首尾空格、制表符,保证数据整洁。

4.4 CSV 写入关键配置

  • encoding="utf-8":统一使用 UTF-8 编码,从根源避免中文乱码;
  • newline="":Python csv 库专属配置,禁止自动插入空行,保证 CSV 格式标准;
  • os.makedirs(..., exist_ok=True):自动创建多级目录,exist_ok=True 表示目录已存在时不抛出异常。

4.5 文件命名规则

文件采用 Page页码-Table表格序号.csv 命名,可直观区分数据来源,方便后续文件管理与溯源。

五、拓展应用方向

批量处理多文件:结合 os.listdir() 遍历指定文件夹,批量读取目录下所有 PDF,循环调用封装函数实现全量表格导出。

数据二次加工:导出 CSV 后结合 pandas 库,实现数据筛选、去重、统计、格式转换等数据分析操作。

表头单独处理:识别表格第一行为表头,写入 CSV 时单独指定表头行,提升数据可读性。

过滤空表格:在代码中增加数据判空逻辑,跳过无有效内容的空白表格,减少无效文件生成。

六、知识扩展

要将PDF表格完美地转换成CSV,关键是找到匹配的解析方法。目前,camelot-pytabula-pypdfplumber是解决这类需求最核心的三个Python库,它们各有侧重,也各有适用的场景。

根据你的PDF文件类型,选择最适合的代码并运行即可。

1. camelot-py:最适合有边框的表格

这种方法对有明确线条的表格提取效果最好,安装简单,但依赖于OpenCV:

pip install camelot-py[cv]

下面的代码演示了最简洁的用法,只需几行就能提取表格并导出为CSV。

import camelot
# 读取PDF并提取表格,fla vor='lattice'适用于有边框的表格
# 可以指定pages='all'来提取所有页面
tables = camelot.read_pdf('your_table.pdf', pages='1-3', fla vor='lattice')
# 将所有提取的表格导出为多个CSV文件(或一个ZIP压缩包)
tables.export('output.csv', f='csv', compress=False)
# 查看第一个提取的表格
print(tables[0].df)
# 如果只想保存第一个表格
# tables[0].to_csv('single_table.csv')

2. pdfplumber:更通用和灵活

pdfplumber 在灵活性和易用性之间取得了很好的平衡,处理各种风格的表格。

pip install pdfplumber

对于大多数情况,extract_table() 方法已经足够好用。但如果遇到样式复杂的表格,extract_tables() 配合 table_settings 参数能帮你更好地控制提取逻辑。

import csv
import pdfplumber
with pdfplumber.open("your_table.pdf") as pdf:
    # 假设表格在第一页
    page = pdf.pages[0]
    # 智能提取表格(自动检测)
    # 如果效果不佳,可以尝试指定table_settings参数
    # table_settings = {"vertical_strategy": "lines", "horizontal_strategy": "lines"}
    # table = page.extract_table(table_settings=table_settings)
    table = page.extract_table()
    if table:
        with open("output.csv", "w", newline='', encoding='utf-8') as f:
            writer = csv.writer(f)
            writer.writerows(table)

pdfplumber 也支持一次性提取页面中的所有表格。

with pdfplumber.open("your_table.pdf") as pdf:
    page = pdf.pages[0]
    tables = page.extract_tables()
    for i, table in enumerate(tables):
        if table:
            with open(f"table_{i+1}.csv", "w", newline='', encoding='utf-8') as f:
                writer = csv.writer(f)
                writer.writerows(table)

3. tabula-py:快速且功能全面

tabula-py 是Ja va版Tabula的Python封装。使用前需安装Ja va 8+环境并将其添加到系统PATH环境变量中

pip install tabula-py

它的API设计非常直接,一行命令就能完成PDF到CSV的转换,对新手很友好。

import tabula
# 提取PDF中所有表格,并保存为CSV文件
tabula.convert_into("your_table.pdf", "output.csv", output_format="csv", pages='all')
# 提取表格到DataFrame列表,以便进行数据处理
# df_list = tabula.read_pdf("your_table.pdf", pages='all')
# print(df_list[0])  # 打印第一个表格

七、总结

以上 Python 示例演示了如何轻松实现 PDF 表格提取并导出为 CSV 文件。通过逐页扫描、单元格清理和标准 CSV 写入,可构建稳定可靠的数据抽取流程。在实际集成中,开发者应当关注表格边框依赖、页面限制以及资源释放等关键因素,并根据文档特性调整文本清洗规则。该方法不依赖任何中间格式或额外解析库,代码结构清晰,适用于自动化数据处理管道。

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发 Python
相关文章 更多
精品专题 更多
本月促销

正软商城本月促销专区,汇集办公、设计、安全、影音、系统工具及AI软件等正版软件优惠活动,提供限时折扣、特价授权和优惠购买信息,活动库存及价格以页面实时展示为准。

装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Menuist
Menuist

Menuist 是一款面向 macOS 的 Finder 右键菜单增强工具,主要用来补充新建文件、快捷导航等常用操作,让日常文件管理和访问路径时更高效、更顺手。

Mole
Mole

Mole 是一款专为 Mac 设计的深度清理优化工具,涵盖缓存清理、应用管理及实时状态监控等功能。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

PinStack
PinStack

PinStack是一款轻量级的Windows平台剪贴板管理工具,优化您的剪贴板使用体验。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Seer
Seer

Seer是一款在Win平台下的空格键功能增强效率工具,只需轻敲空格键,就能预览几乎任何格式的文件。它更适合把零散的小功能集中起来使用,处理高频琐碎任务时会更省事。