当前位置: 首页 > news >正文

[特殊字符] 扫描式处理:Python 自动提取 PDF 中关键词相关表格并导出为 Excel

本文演示如何利用 pdfplumber 批量处理指定文件夹下 PDF 文档:定位关键词(如“主要会计数据”)出现的页码及下一页,提取其中的表格并保存为独立 Excel 文件。适用于财务报告、审计表格、统计报表等场景。


1️⃣ 第一步:批量收集 PDF 文件路径

import ospath = 'PDF'
files = [os.path.join(path, f) for f in os.listdir(path)]
  • 使用 os.listdir() 获取文件夹下所有 PDF;

  • 拼接完整路径后存储到 files 列表,便于批量处理。


2️⃣ 示例脚本:查找关键词并导出表格

import pdfplumber
from openpyxl import Workbookkey_words = "主要会计数据"for file in files:with pdfplumber.open(file) as pdf:wb = Workbook()wb.remove(wb.worksheets[0])pages_wanted = []for idx, page in enumerate(pdf.pages):if key_words in page.extract_text():pages_wanted.extend([idx, idx+1])breakfor i in pages_wanted:page = pdf.pages[i]tables = page.extract_tables()if tables:ws = wb.create_sheet(f"Sheet{i+1}")for table in tables:for row in table:ws.append(row)out_name = os.path.splitext(os.path.basename(file))[0]wb.save(f"Excel/{out_name}.xlsx")
  • .extract_text() 用于查找关键词所在页;

  • .extract_tables() 提取该页表格内容;

  • 使用 openpyxl 写入 Excel,每个表对应一个工作表;

  • 模仿页面编号给 sheet 命名。


📌 技术说明与推荐设置

  • pdfplumber.extract_tables() 默认以页面中水平与垂直线条为依据提取单元格边界,也可使用 table_settings 参数调整策略
    arXiv+10Python 包索引+10Stack Overflow+10

  • 该方法适合扫描式 PDF 或数字 PDF,但若布局复杂可设定 vertical_strategy="text" 等方式
    Stack Overflow+1Python 包索引+1

  • pdfplumber 基于 pdfminer.six,适用于结构化文档提取,对 OCR 文档支持有限
    arXiv+2GitHub+2Python 包索引+2


🖼️ 结果展示区

✅ 优化与扩展建议

功能建议
📦 批量处理可接入 os.walk() 递归处理子目录;
⚙️ 精准提取使用 page.crop(...)table_settings 定位表格区域(示例见pdfplumber文档) arXiv+10Medium+10Python 包索引+10;
🧩 排错机制若某页未提取表格,可记录日志或存储空表;
🗄 合并数据可将多个表格结果汇总到一个 Excel 并生成摘要页;
🚀 更换工具对于更复杂财务表格,可考虑 Camelot 或 Tabula 提供更多控制和效果优化;

 更多实用案例,代码,素材如下:

自取链接:https://pan.quark.cn/s/a46f30accea2


🧠 总结

本文提供了一种 关键词驱动 + 表格提取 + Excel 输出 的自动化脚本流程,适合常见金融、财务、审计类 PDF 报表的快速结构化处理。

http://www.dtcms.com/a/273795.html

相关文章:

  • Ubuntu 22.04与24.04 LTS版本对比分析及2025年使用建议
  • 嵌入式学习笔记--MCU阶段--day03中断
  • sqli-labs靶场通关笔记:第5-6关 报错注入
  • Android原生TabLayout使用技巧
  • DNS(Domain Name System,域名系统)
  • 11. TCP 滑动窗口、拥塞控制是什么,有什么区别
  • 正义的算法迷宫—人工智能重构司法体系的技术悖论与文明试炼
  • KeyError: “No object named ‘MambaIRv2Model‘ found in ‘model‘ registry!“
  • iOS 数组如何设计线程安全
  • netdxf—— CAD c#二次开发之(netDxf 处理 DXF 文件)
  • Rail开发日志_3
  • uniapp+unipush推送配置
  • 阿里云MaxCompute SQL与Apache Hive区别面面观
  • 开疆智能EtherCAT转CANopen网关连接台达伺服驱动器配置案例
  • 大模型及agent开发6 OpenAI Assistant API 高阶应用 - 流式输出功能
  • SEQUENCE在RAC多实例开启CACHE的NEXTVAL数值乱序问题
  • redis数据结构和数据类型
  • Redis实战案例
  • Java 面试题超详细解析(二)
  • Windows下的redis
  • 小木的机器学习日记——KNN
  • lua中检查静态常量是否正确引用
  • 每天一个前端小知识 Day 28 - Web Workers / 多线程模型在前端中的应用实践
  • 【web应用】若依框架前端报表制作与导出全攻略(ECharts + html2canvas + jsPDF)
  • 界面组件DevExpress WPF中文教程:Grid - 如何检查节点?
  • Windows 应用程序的 UI 框架:WPF、WinUI 3 和 UWP的差异区别
  • VMware安装Centos 7
  • pandas销售数据分析
  • 十年架构心路:从单机到云原生的分布式系统演进史
  • 七牛云运维面试题及参考答案