PDF 表格转 CSV:Python 实现方法与代码解析

一、环境准备

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 核心类说明

  1. PdfDocument

    PDF 文档操作主类,LoadFromFile() 用于加载本地 PDF 文件,Pages.Count 获取文档总页数,Dispose() 用于释放文件流、内存等资源,批量处理文件时必须调用,防止内存堆积。

  2. 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 命名,可直观区分数据来源,方便后续文件管理与溯源。


五、拓展应用方向

  1. 批量处理多文件

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

  2. 数据二次加工

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

  3. 表头单独处理

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

  4. 过滤空表格

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

相关推荐
gugucoding1 小时前
39. 【C语言】经典 C 项目实战:迷你 HTTP 服务器
c语言·开发语言·http
智写-AI1 小时前
推荐一下好用的降英文AI工具工具
人工智能·python
什巳1 小时前
JAVA练习277- 找到字符串中所有字母异位
java·开发语言·算法·leetcode
头茬韭菜2 小时前
3.6 依赖注入 — 四个依赖的精准边界
开发语言·ai·ecmascript
江华森2 小时前
Python神经网络编程(四):Python从零搭建神经网络
开发语言·python·神经网络
Helen_cai3 小时前
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构)
开发语言·华为·php·harmonyos
大圣编程8 小时前
Java 多维数组详解
java·开发语言
殳翰11 小时前
下服务器端开发流程及相关工具介绍(C++)
开发语言·c++
落寞的星星11 小时前
这个对象就包含了已经转换好的DFA和各种词法分析器运转所需要的参数。下一步,我们就可以用ScannerInfo对象创建出Scanner对象,请看下面的代码:
开发语言·c#