python读取json数据还原表格批量转换成html
作者:kuokay 发布时间:2023-11-19 05:46:20
背景:
由于需要对ocr
识别系统的表格识别结果做验证,通过返回的json
文件结果对比比较麻烦,故需要将json
文件里面的识别结果还原为表格做验证。
文件部分内容如下:
{"row":"6","col","5""start_row": 0, "start_column": 0, "end_row": 0, "end_column": 0, "data": "称", "position": [51, 71, 168, 93], "org_position": [50, 60, 167, 62, 166, 84, 49, 82], "char_position": [[86, 83, 100, 100]], "lines": [{"text": "称", "poly": [84, 73, 98, 73, 98, 90, 84, 90, 0.874], "score": 0.874, "char_centers": [[91, 82]], "char_polygons": [[84, 77, 98, 74, 98, 87, 84, 90]], "char_candidates": [["称"]], "char_candidates_score": [[0.999]], "char_scores": [0.999]}]}
现在需要通过行列的起始和结束坐标以及内容生成相应的表格
开始准备使用js但由于一些语法忘记,所以还是选用python进行。
在经过一些列研究后发现利用python-docx
可自动生成表格,但是格式是word的,所有后期又进行了word转html操作。
一、实操
pip install python_docx
1.首先创建一个新的文档
from docx import Document
document = Document()
然后用Document
类的add_table
方法增加一个表格,其中rows是行,cols是列,style表格样式,具体可以查看官方文档:
table = document.add_table(rows=37,cols=13,style='Table Grid')
上述代码就在word里插入了一个37行、13列的表格。(有37*13=481个cell)
生成的每个cell都是有“坐标”的,比如上面的表格左上角cell为(0,0),右下角cell为(36,12)
下面要做的就是合并一些cell,从而达到我们最终需要的表格
table.cell(0,0).merge(table.cell(2,2))
上述代码就将cell(0,0)到cell(2,2)之间的所有cell合并成一个cell
这里需要注意的是,虽然每个cell都合并了,但其实它还是存在的。比如合并了(0,0)和(0,1)两个cell,那么这个合并的cell其实就是(0,0;0,1)
如果cell较多,无法直观的看出坐标的话,可以用下列的代码将每个cell的坐标都标注出来,方便合并
document = Document()
table = document.add_table(rows=37,cols=13,style='Table Grid')
document.save('table-1.docx')
document1 = Document('table-1.docx')
table = document1.tables[0]
for row,obj_row in enumerate(table.rows):
for col,cell in enumerate(obj_row.cells):
cell.text = cell.text + "%d,%d " % (row,col)
document1.save('table-2.docx')
2.添加文本
将所有cell依次合并后,就需要向合并后的cell
里添加文本。
用table的row方法可以得到一个表格的一行list其中包含了这一行的所有cell
hdr_cells0 = table.rows[0].cells
上面代码就得到了合并表格后的第一行所有cell,然后我们用hdr_cell0[0]就可以得到合并表格后的第一行的第一个cell。用add_paragraph
方法即可像cell里添加文本
hdr_cells0[0].add_paragraph('数据文字')
其他使用方法可参考官网模块:https://www.osgeo.cn/python-docx/
二、word转成html
1.使用pydocx转换
pip install pydocx
from pydocx import PyDocX
html = PyDocX.to_html("test.docx")
f = open("test.html", 'w', encoding="utf-8")
f.write(html)
f.close()
通过网页上传word文档,只接收docx
<form method="post" enctype="multipart/form-data">
<input type="file" name="file" accept="application/vnd.openxmlformats-officedocument.wordprocessingml.document">
</form>
2.使用win32模块
pip3 install pypiwin32
from win32com import client as wc
import os
word = wc.Dispatch('Word.Application')
def wordsToHtml(dir):
for path, subdirs, files in os.walk(dir):
for wordFile in files:
wordFullName = os.path.join(path, wordFile)
doc = word.Documents.Open(wordFullName)
wordFile2 = wordFile
dotIndex = wordFile2.rfind(".")
if (dotIndex == -1):
print(wordFullName + "********************ERROR: 未取得后缀名!")
fileSuffix = wordFile2[(dotIndex + 1):]
if (fileSuffix == "doc" or fileSuffix == "docx"):
fileName = wordFile2[: dotIndex]
htmlName = fileName + ".html"
htmlFullName = os.path.join(path, htmlName)
print("generate html:" + htmlFullName)
doc.SaveAs(htmlFullName, 10)
doc.Close()
word.Quit()
print("")
print("Finished!")
if __name__ == '__main__':
import sys
if len(sys.argv) != 2:
print("Usage: python funcName.py rootdir")
sys.exit(100)
wordsToHtml(sys.argv[1])
来源:https://blog.csdn.net/qq_45066628/article/details/123246744
猜你喜欢
- 数据库计算机 databasecomputer 实现数据库的存储、管理和控制的一种专用计算机系统。它能十分快速而有效地完成各种数据库操作,并
- Python实现模拟时钟代码推荐# coding=utf8import sys, pygame, math, randomfrom pyga
- 问题Go语言在编译时不会将配置文件这类第三方文件打包进二进制文件中它既受当前路径的影响,也会因所填写的不同而改变,并非是绝对可靠的解决命令行
- 为了更好的进行封装,每个实现不同功能的js代码应该有自己的js文件,这样如果一个网页中引用了多个js文件,如下 <script typ
- 如何做一个计数器并让人家申请使用? 第一步:创建一个计数器(最简单的数字计数器,不是图片式的):&nbs
- 组合模式Composite Pattern是什么组合模式是一种结构型模式,它允许你将对象组合成树形结构来表示“部分-整体
- 如果没有设置分页,django-rest-framework 会将所有资源类表序列化后返回,如果资源很多,就会对网站性能造成影响。为此,我们
- Oracle物理结构故障是指构成数据库的各个物理文件损坏而导致的各种数据库故障。这些故障可能是由于硬件故障造成的,也可能是人为误操作而引起。
- 在数据库开发方面,通过单表所表现的实现,有时候需要组合查询来找到我们需要的记录集,这时候我们就会用到连接查询。连接查询主要包括以下几个方面:
- 在现在的项目里,不管是电商项目还是别的项目,在管理端都会有导出的功能,比方说订单表导出,用户表导出,业绩表导出。这些都需要提前生成excel
- Python慢的重要原因:1、python是动态性语言不是静态性语言在python程序执行的时候,编译器不知道变量的类型。2、python是
- 第一种:获取不带后缀的文件名,直接上代码:就是直接用basename()函数就可以返回路径中的文件名部分,其语法是“basename(pat
- 在网页设计中有一些通用的交互设计模式。网站导航各种各样的通用和大家熟知的设计模式,可以用来作为为网站创建有效地信息架构的基础。这篇指南涵盖了
- 昨天有人在群里问图1的边框效果是否能实现。 边框效果图有人给出答案,需要嵌套一个元素实现。我当时粗粗写了个测试页面,但是时间太晚了,也没有细
- JQuery Solar System 是一个用JQuery写的东西,效果真是cool ! 没想到使用Javascript 也可以做到这种效
- 首先.还是看效果.实现对文本域textarea中文字字数的限制。然后.米了...看文件.里面写的很清楚了.下面这个是单独的效果..提示用al
- 大量的多行段落本身就会降低可读性,同时空行分段也比空格分段有更高的可适应性...前文讨论的热烈程度远超我预期,正好还有之前查阅资料拍的几张实
- 对于更完整的代码可以参考,这个是支持数据库的版本。经过测试Asp+Ajax仿google搜索提示效果 数据库版google搜索提示.rar
- 优化数据库的注意事项:1、关键字段建立索引。2、使用存储过程,它使SQL变得更加灵活和高效。3、备份数据库和清除垃圾数据。4、SQL语句语法
- 本文实例讲述了python实现从ftp服务器下载文件的方法。分享给大家供大家参考。具体实现方法如下:import ftplibftp = f