最近需要处理xml文件,学习并整理了一些常用的操作,代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/7/9 15:16
# @Author : xiaodai
import xml.etree.ElementTree as ET
from lxml import etree
from tqdm import tqdm
import os def creat_xml(xml_file,x,y,w,h):
"""
新建xml文件
:param xml_file: xml
:param x: xmin
:param y: ymin
:param w: 宽
:param h: 高
:return:
"""
root = etree.Element("annotation") # 创建根节点 annotation
child1 = etree.SubElement(root, "folder")
child1.text = "VOC2007"
object = etree.SubElement(root, "object") # 创建annotation节点的子节点 object
namen = etree.SubElement(object, "name") # 创建object节点的子节点 name
namen.text = 'person' # name的值为person
bndbox = etree.SubElement(object, "bndbox")
xminn = etree.SubElement(bndbox, "xmin")
xminn.text = str(x)
yminn = etree.SubElement(bndbox, "ymin")
yminn.text = str(y)
xmaxn = etree.SubElement(bndbox, "xmax")
xmaxn.text = str(x + w)
ymaxn = etree.SubElement(bndbox, "ymax")
ymaxn.text = str(y + h)
weight = etree.SubElement(bndbox, "box_w")
weight.text = str(w)
height = etree.SubElement(bndbox, "box_h")
height.text = str(h)
tree = etree.ElementTree(root)
tree.write(xml_file, pretty_print=True, xml_declaration=False, encoding='utf-8') def edit_xml(xml_file):
"""
修改xml文件
:param xml_file:xml文件的路径
:return:
"""
tree = ET.parse(xml_file)
objs = tree.findall('object')
for ix, obj in enumerate(objs):
name = obj.find('name').text
if name == 'mouse':
print(xml_file)
obj_new = obj.find('bndbox')
xmin = str( 1280 - int(obj_new.find('xmin').text))
xmax = str( 1280 - int(obj_new.find('xmax').text))
obj_new.find('xmin').text = xmin # 修改节点值
obj_new.find('xmax').text = xmax conf = obj_new.find('conf')
conf.tag = 'fenshu' # 修改节点名 newEle = ET.Element("NewElement1")
newEle.text = "new element"
obj_new.append(newEle) # 新增节点 newEle = obj_new.find('xmin')
obj_new.remove(newEle) # 删除节点 obj_new.set('key','value') # 给bndbox节点设置属性 <bndbox key="value"> tree.write(xml_file,method='xml',encoding='utf-8') # 更新xml文件 if __name__ == '__main__':
path = r'F:\temp\tmp_0709'
xml_files = [os.path.join(rootdir, file) for rootdir, _, files in os.walk(path) for file in files if
(file.endswith('.xml'))]
for xml in tqdm(xml_files):
edit_xml(xml) # 修改xml文件
for i in tqdm(range(10)):
xml = os.path.join(path,str(i)+'.xml')
creat_xml(xml,32,120,80,80) # 新建xml文件

python-----批量操作xml文件(新建、增、删、改、查)的更多相关文章

  1. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

  2. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  3. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  4. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  5. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  6. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  7. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  8. 【C#】如何创建xml文件以及xml文件的增、改

    增: using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpre ...

  9. iOS Plist 文件的 增 删 改

    一:Plist 文件的创建 Plist 文件作为我们IOS开发的一种数据存储文件,还是经常会用到的.在看<X-code江湖录>的时候,看到了这一点.自己就写了一下,把写的东西分享出来!先看 ...

  10. 简单的php数据库操作类代码(增,删,改,查)

    这几天准备重新学习,梳理一下知识体系,同时按照功能模块划分做一些东西.所以.mysql的操作成为第一个要点.我写了一个简单的mysql操作类,实现数据的简单的增删改查功能. 数据库操纵基本流程为: 1 ...

随机推荐

  1. CentOS安装文件共享samba

    参考:https://jingyan.baidu.com/article/03b2f78cdf811c5ea237aebc.html https://www.linuxidc.com/Linux/20 ...

  2. WordPress的摘要显示方式

    WordPress的后台有摘要显示的栏目,如果没有显示,需要设置一下,如图 在列表页现实的内容的时候,一般是有摘要的显示摘要,没有摘要的截取文章的前一部分文字.代码如下 <?php if(has ...

  3. Flask框架(2)--编写简单的用户注册--登录场景

    为了更好的理解web前后端的工作业务逻辑:本笔记记录用flask框架编写的一个最初级的代码实现简单的用户注册,登录场景: 初次进入首页,提示--游客,欢迎参观,有登录和注册选项, 登录成功后的用户,会 ...

  4. 前端添加视频流rtmp格式

    要求:rtmp格式, 在线直播 url地址 效果: 代码:初次打开时间较长, <!DOCTYPE html> <html> <head> <script ty ...

  5. 【数据库开发】Redis数据库服务器启动配置

    Redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sor ...

  6. eNSP——ACL基础设置

    原理: 实验案例: 拓补图: 实验编址: 1.基础设置 根据实验编址进行基础设置,并检测直连链路的连通性. 2.搭建OSPF网络 在所有路由器运行OSPF协议,通告相应网段到区域0. 在上一个随笔有详 ...

  7. P4568 飞行路线【分层图最短路】

    题目链接:https://www.luogu.org/problem/P4568 题目大意:给定n个点,m条无向边,k次机会经过边时代价为 0 .给出起点和终点,求其最短路径. 解题思路: 两种方法, ...

  8. jmeter XLSX 读取

    import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFSheet; i ...

  9. 一个简单的一个sql表遍历

    简单的一个sql表遍历 一般我们写储存过程或者其他sql语句的时候都会用到循环遍历数据,最常用的两种就是 1.游标 2.临时表+while 下面贴出示例代码 DECLARE @MinReLogID I ...

  10. Centos7.0配置Hadoop2.7.0伪分布式

    一.ssh免密登录 1.命令ssh-keygen. overwrite输入y一路回车 2.将生成的密钥发送到本机 ssh-copy-id localhost中间会询问是否继续输入“yes” 3.测试免 ...