小秦哥 发表于 4 小时前

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

PDF 格式因其版式固定性而广泛用于文档交换,但也导致布局化数据(如表格)难以直接抽取。只管存在多种剖析方案(如基于文本坐标开导式或 OCR),但对于具有明确边框和单位格边界的表格,专用表格提取器能提供更高的正确度。本文将先容怎样利用免费库 Free Spire.PDF for Python 剖析 PDF 表格,并联合 Python 内置 csv 尺度库完成数据导出。
一、情况准备

1. 依赖库安装

本次实现依赖 PDF 剖析组件与 Python 原生库,实行以下下令安装免费版 PDF 剖析组件:
pip install Spire.Pdf.Free2. 技能分析


[*]焦点依赖:spire.pdf.free 负责辨认、提取 PDF 中的表格布局与单位格数据;
[*]文件导出:利用 Python 内置 csv、os 尺度库完成目次创建、CSV 写入,无需额外第三方数据处理惩罚库;
[*]实用场景:支持单页/多页 PDF、单页多表格场景,可主动按页面+表格序号拆分输出文件;
[*]兼容性:导出 UTF-8 编码 CSV,可直接用 Excel、WPS、Pandas 等工具读取。
二、焦点实现思绪


[*]初始化 PDF 文档对象,加载当地 PDF 文件;
[*]创建表格提取器,绑定已加载的 PDF 文档;
[*]遍历 PDF 全部页面,逐页提取当前页面内的全部表格;
[*]针对每个表格,逐行、逐列读取单位格文本,并做根本文本洗濯;
[*]主动创建输出目次,将单张表格数据写入独立 CSV 文件,文件按页面、表格编号定名;
[*]实行资源开释利用,开释 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 时单独指定表头行,提拔数据可读性。
[*]过滤空表格
在代码中增长数据判空逻辑,跳过无有用内容的空缺表格,淘汰无效文件天生。
六、总结

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

免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.
页: [1]
查看完整版本: PDF 表格转 CSV:Python 实现方法与代码剖析