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

pymupdf提取pdf表格及表格数据合并

pymupdf提取pdf表格非常快速,相比其他库是个更好的选择.

一个行列多的表格打印成pdf后会由于页宽分页原因变成多个表格,提取的多个表格需要合并为一个表格,再来处理数据.

下面代码中merge函数用于合并表格.addOneAxis0用于合并仅分页导致的多子表.

def addOneAxis0(data,one):if len(data)==0:#firstr=oneelse:r=data+one[1:]#remove first title rowreturn r    def merge(data):output=data[0]titles=data[0][0][1:]for i in range(1,len(data)):newtitle=data[i][0][1:]# print(titles)# print(newtitle)# input("here")if newtitle[0] in titles:#repeatfor one in data[i][1:]:#add rowoutput.append(one)else:#if newtitle[0] in output[0]:#add column without titlethedata=data[i][1:]#remove titlen=len(thedata)out=output[-n:]for j in range(len(out)):out[j]+=thedata[j][1:]passelse:#add column with titlen=len(data[i])out=output[-n:]for j in range(len(out)):#add columnout[j]+=data[i][j][1:]passreturn output
def getDataMass(file_name):global doc,curvePagedoc=fitz.open(file_name) # open documentdata=[]mass=[]tables=[]i=Nonefor i in range(doc.page_count).__reversed__():page = doc[i]tabs=page.find_tables()if len(tabs.tables)==0:breakelse:tables.append(tabs[0].extract())tables.reverse()for one in tables:if one[0][0]=="溶液标签":data.append(one)#data.append(one)else:mass=addOneAxis0(mass,one)curvePage=iprint(data)data=merge(data)print(data)return (data,mass)

相关文章:

  • 高舒适性气膜网球馆的注意事项—轻空间
  • JSP与Servlet的区别
  • vscode编译文件夹下所有文件的配置(包含插件和 .json 文件)
  • 现阶段对于伪造检测的重难点--泛化
  • 【C++PCL】点云处理KD-ICP配准
  • C# 类型系统
  • 异步通知驱动实例
  • 数据可视化---使用matplotlib绘制高级图表(2)
  • MySQL—多表查询(概述、基本实操、分类)
  • 240.搜索二维矩阵
  • 开发指南027-微信支付
  • HR招聘面试测评,测评候选人的语言和表达能力
  • 数字化转型中存在的五大问题:意识、供给、成本、能力、竞争力培育
  • Linux命令locate:快速定位文件与目录
  • IO转换流
  • (三)从jvm层面了解线程的启动和停止
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【技术性】Search知识
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaWeb(学习笔记二)
  • Js基础知识(四) - js运行原理与机制
  • log4j2输出到kafka
  • mysql 数据库四种事务隔离级别
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SQLServer之创建数据库快照
  • vue.js框架原理浅析
  • 彻底搞懂浏览器Event-loop
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 力扣(LeetCode)22
  • 新版博客前端前瞻
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 找一份好的前端工作,起点很重要
  • 智能合约Solidity教程-事件和日志(一)
  • # Maven错误Error executing Maven
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (LeetCode 49)Anagrams
  • (不用互三)AI绘画工具应该如何选择
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net反编译的九款神器
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @EventListener注解使用说明
  • @Value读取properties中文乱码解决方案
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [AIGC] 如何建立和优化你的工作流?
  • [Android]常见的数据传递方式
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [bzoj1912]异象石(set)
  • [C#学习笔记]LINQ