最近需要处理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. 第四章 INI配置——《跟我学Shiro》

    转发地址:https://www.iteye.com/blog/jinnianshilongnian-2020820 第四章 INI配置——<跟我学Shiro> 博客分类: 跟我学Shir ...

  2. iOS-UITextField和UITextView隐藏键盘

    UITextField和UITextView隐藏键盘 71 views, IOS DEV, by admin. self._textField.returnKeyType=UIReturnKeyDon ...

  3. 修改iPhone5s crash 问题

  4. 【miscellaneous】各种音视频编解码学习详解

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  5. Jenkins简单入门:下载-安装-配置-构建

    Jenkins简单配置流程 官网下载地址:https://jenkins.io/index.html 1.下载安装Jenkins (1)点击Download Jenkins进入下载页 (2)根据自己运 ...

  6. boost::bind四种应用场景的例子

        普通函数 int f( int a, int b ){return a + b;}boost::bind( f, _1, 9 )( 1 ) 成员函数 struct demo{int f( in ...

  7. 使用runtime完成解档归档

    简单的创建一个Person对象,并声明几个属性 @interface Person : NSObject<NSCoding> // 归档问题 必须遵守该协议 /** */ @propert ...

  8. CSS内联--与块级元素区别

    内联元素:1.内联元素(inline)不会独占一行,相邻的内联元素会排在同一行.其宽度随内容的变化而变化. 2.内联元素不可以设置宽高 3.内联元素可以设置margin,padding,但只在水平方向 ...

  9. 计算属性和mathod的对比

    methods:定义函数      调用的是  函数名()      用一次则需要调用一次,效率低 computed:定义函数   调用的是   函数名      只调用一次,因此效率高

  10. S2. Android 常用控件

    [概述] Button(普通按钮):点击事件处理 Toast(消息提示) Menu(菜单): Menu + Fragment 实现菜单切换 [Button] 在 MainActivity 对应的布局文 ...