xml合并

news2024/11/15 1:54:03

 

 

from xml.etree.ElementTree import ElementTree, Element, parse
 
import xml.etree.ElementTree as ET
 
import os
 
import shutil
 
hole_path = './Annotations'
 
arm_path = './Annotations1'
 
out_path = './out'
 
# 格式化
 
def __indent(elem, level=0):
 
    i = "\n" + level*"\t"
 
    if len(elem):
 
        if not elem.text or not elem.text.strip():
 
            elem.text = i + "\t"
 
        if not elem.tail or not elem.tail.strip():
 
            elem.tail = i
 
        for elem in elem:
 
            __indent(elem, level+1)
 
            if not elem.tail or not elem.tail.strip():
 
                elem.tail = i
 
    else:
 
        if level and (not elem.tail or not elem.tail.strip()):
 
            elem.tail = i
 
for hole_xml in os.listdir(hole_path):
 
    # 将同名xml合并
 
    if os.path.exists(os.path.join(arm_path,hole_xml)):
 
        print('fusing',hole_xml)
 
        tree_hole = parse(os.path.join(hole_path,hole_xml))
 
        root_hole = tree_hole.getroot() # annotation
 
        new_hole = tree_hole
 
        tree_arm = parse(os.path.join(arm_path,hole_xml))
 
        root_arm = tree_arm.getroot() # annotation
 
        object = (tree_arm.findall('object'))
 
        for i in range(len(object)):
 
            root_hole.append(object[i])
 
            __indent(root_hole)
 
            new_hole.write(os.path.join(out_path,hole_xml))
 
            # 不同名xml复制
 
    else:
 
        print('copying',hole_xml)
 
        shutil.copy(os.path.join(hole_path,hole_xml), out_path)
 
# 将不同名xml复制
 
for arm_xml in os.listdir(arm_path):
 
    if not os.path.exists(os.path.join(out_path,arm_xml)):
 
        print('copying')
 
        shutil.copy(os.path.join(arm_path, arm_xml), out_path)
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/714209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE5.2 LyraDemo源码阅读笔记(三)

进入淘汰模式游戏流程 启动游戏,进入流程: 1、进入Lyra游戏第三个体验入口FrontEnd。 2、来到大厅主界面后,点击: Play Lyra > Start A Game >ELIMINATION就会进入到淘汰模式游戏。 看看蓝图和代码,其中的UI流程…

dubbo-admin下载安装教程

目录 1.下载 2.项目结构 3.后端打包 4.前端打包 4.1.node js环境准备 4.2.依赖安装 4.3.启动、打包 1.下载 下载地址: GitHub - apache/dubbo-admin at develop dubbo-admin项目有多个分支,最新版本的dubbo-admin在使用go语言进行重构&#xf…

解决电脑提示vcruntime140_1.dll无法继续执行代码的问题

vcruntime140_1.dll丢失要怎么办?其实很多人都在头疼这个问题,关于dll文件的丢失这事情是时常发生的,因为电脑的杀毒软件有时候会误杀,然后就会导致你的游戏程序都打开不了,你必须要修复好了才行,今天小编就…

统计文本中的数字出现频次

统计文本中的数字出现频次:磁盘上有多个文本文件,统计数据写入excel。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教…

AttributeError: module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘

在使用ddddocr进行图片识别时,报错了: AttributeError: module PIL.Image has no attribute ANTIALIAS 我使用的是Python 3.11,查看一下pillow的版本: print(PIL.__version__)10.0.0 到处百度也没找到原因,最后&am…

IDEA解析Maven依赖过慢

查看Maven配置文件&#xff0c;是否更改为阿里源 maven安装目录/conf/setting.xml 搜索mirrors并在其中添加 <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/ </url&…

【嘉立创EDA】层次原理图功能使用,或放置复用图块方法

文章路标👉 文章解决问题主题内容小结文章解决问题 1️⃣ 在一些较为复杂的原理图绘制时,常需要使用到复用图块。何为复用图块,笔者摘取ST MB1136设计原理图纸可以较好表述这个功能,如下图所示: [本图摘取自NUCLEO-F103RB设计图纸 sheet 2 of 5] 图中左上角绿色图块为…

探索iPadOS 17的亮点特性:值得关注的新功能揭秘

探索iPadOS 17的亮点特性&#xff1a;值得关注的新功能揭秘 看完在WWDC23上作为久违的“OneMoreThing”亮相的令人兴奋的AppleVisionPro后&#xff0c;是时候看看同样作为重要角色出现在发布会上的iPadOS了。与iOS一样&#xff0c;iPadOS也来到了17时代。除了一年后同步iOS16的…

WinApp自动化测试之WinAppDriver工具简介

前篇文章中&#xff0c;我们讲到了WinApp自动化测试工具的选择&#xff0c;今天我们来简单介绍WinAppDriver工具。 Windows Application Driver (WinAppDriver)是Windows系统上的一个应用程序驱动工具&#xff0c;使用该驱动程序&#xff0c;测试人员能够通过Appium-Python-Cl…

el_table切换行前校验,决定是否可切换

思路&#xff1a;拿到当前点击行并存储比如叫做oldRow&#xff0c;把即将切换行的row与oldRow做对比&#xff0c;校验是否可切换&#xff0c;若校验不可切换&#xff0c;则通过遍历仍选中仍选中oldRow.

python简单实现人脸检测/跟随

import cv2# 加载人脸识别器的模型 face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml)# 打开摄像头 cap cv2.VideoCapture(0)# 初始化人脸框位置 prev_faces []# 定义绘制带圆角矩形边框的函数 def draw_rounded_rectangle(…

C语言学习(三十一)---结构体、联合体的在内存中的存储

在上一篇文章中&#xff0c;我们学习了枚举、位段和联合体的相关内容&#xff0c;在文章的末尾&#xff0c;我们还差了关于联合体的存储问题的内容&#xff0c;今天我们将学习该部分的内容&#xff0c;好了&#xff0c;话不多说&#xff0c;开整&#xff01;&#xff01;&#…

TiDB(2):TiDB架构特性

1 TiDB 整体架构 TiDB 集群主要包括三个核心组件&#xff1a;TiDB Server&#xff0c;PD Server 和 TiKV Server。此外&#xff0c;还有用于解决用户复杂 OLAP 需求的 TiSpark 组件和简化云上部署管理的 TiDB Operator 组件。 架构图解 1.1 TiDB Server TiDB Server 负责接收…

20个主流的代码生成LLM大模型及9种常见应用场景

基于生成式AI的代码生成&#xff08;Code Generation&#xff09;是一个重要的新领域&#xff0c;用于根据不完整的数据源、用另一种编程语言编写的程序、自然语言描述或执行日志来预测代码或程序结构。 多年来&#xff0c;开发人员经常从博客、帖子、文章和其他网站获取代码&…

vue引用百度地图,drawingManager.setDrawingMode不能接受参数,否则会报错

直接上部分代码&#xff1a; 引用百度地图后&#xff0c;没报错&#xff0c;但是鼠标绘制线路时报错&#xff1a; // 绘制点线 this.drawingManager new window.BMapLib.DrawingManager(this.map, { isOpen: true, //是否开启绘制模式 //enableDrawingTool: true, //是否显示…

数据结构 | 线索二叉树

一、数据结构定义 /* 线索二叉树 */ typedef char ThreadType; typedef struct ThreadNode {ThreadType data;struct ThreadNode* lchild, * rchild;int ltag, rtag; //左右线索标志 }ThreadNode, *ThreadTree; 二、方法概览 ThreadTree createTree(); //先序方法创建二叉树…

==和equals的区别

“”和equals 最大的区别是 “”是运算符&#xff0c;如果是基本数据类型&#xff0c;则比较存储的值&#xff1b;如果是引用数据类型&#xff0c;则比较所指向对象的地址值。equals是Object的方法&#xff0c;比较的是所指向的对象的地址值&#xff0c;一般情况下&#xff0c…

Jvisualvm内存模型剖析-JVM(五)

上篇文章代码讲解了tomcat加载以及gc回收流程。 Jvm内存模型剖析优化-JVM&#xff08;四&#xff09; Jvisualvm 我们可以编写如上代码&#xff0c;之后打开jvm自带的工具jvisualvm。 如果我们看visual不会明显变化&#xff0c;则可以修改睡眠参数&#xff0c;时间改小。 当…

【MySQL】根据MVCC和Read View分析事务的四种隔离级别在读写场景分别是如何体现其隔离性的

目录 一、数据库并发的三种场景 二、读写场景的MVCC 1、3个&#xff08;4个&#xff09;记录隐藏列字段 2、undo log&#xff08;撤销日志&#xff09; 3、模拟MVCC场景 3.1update场景 3.2delete场景 3.3insert 3.4select场景 4、Read View 5、RR和RC的区别 5.1当…

Squid 代理服务器应用

目录 一、Squid 概念1.1 代理的工作机制1.2 代理服务器的作用1.3 Squid 代理的类型 二、安装 Squid 服务2.1 编译安装 Squid2.2 修改 Squid 的配置文件2.3 Squid 的运行控制2.4 创建 Squid 服务脚本 三、构建传统代理服务器四、构建透明代理 服务器五、ACL 访问控制六、 日志分…