当前位置: 首页 > 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.lryc.cn/news/584897.html

相关文章:

  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(下)
  • lodash不支持 Tree Shaking 而 lodash-es可以
  • 零基础入门指南:华为数通认证体系详解
  • 代码随想录|图论|10水流问题
  • 视频人脸处理——人脸面部动作提取
  • 静电式 vs UV 光解:哪种油烟净化技术更适合你的餐厅?
  • python的病例管理系统
  • 【JMeter】执行系统命令
  • VS 按F12 提示cannot navigate to the symbol under the caret
  • 机器学习详解
  • linux中INIT_MM_CONTEXT宏对pgd的重复赋值
  • Windows 10 2021 LTSC【版本号:19044.6036】
  • 设计模式笔记_结构型_代理模式
  • 小白学Python,标准库篇——随机库、正则表达式库
  • 【跟着PMP学习项目管理】每日一练 - 5
  • C++,从汇编角度看《虚拟继承的邪恶》
  • 【Linux】GDB/CGDB 调试器学习笔记
  • 【经典面经】C++新特性 TCP完整收发数据 TLS1.2 TLS1.3
  • AWS控制台升级EKS版本
  • AI进化论07:第二次AI寒冬——AI“改头换面”,从“AI”变成“机器学习”
  • 学习C++、QT---20(C++的常用的4种信号与槽、自定义信号与槽的讲解)
  • 基于vscode开发工具显示git提交信息的插件
  • Web3.0 支付网络对企业的优势
  • Linux磁盘限速(Ubuntu24实测)
  • spark3 streaming 读kafka写es
  • 可以悬浮在Windows电脑桌面的好用便签软件评测
  • 前端开发—全栈开发
  • php use 命名空间与 spl_autoload_register的关系
  • DVWA靶场通关笔记-反射型XSS(Reflected Low级别)
  • uni-app获取手机当前连接的WIFI名称