python解析xml读取指定属性_python批量修改xml某些内容和属性

在训练时,有时候需要将jpg格式转换为png格式,顺便也要把jpg标注的xml文件转换为png的xml文件。例如,需要把xml文件中的图像后缀名“.jpg”批量去掉,这时候就需要批量修改Xml中的属性了。

比如:修改之前的文件:

修改后:

import os

import os.path

import xml.dom.minidom

path="E:\python_summary\image_ano\Ano"

files=os.listdir(path)#返回文件夹中的文件名列表

#print(files)

s=[]

count=0

for xmlFile in files:

if not os.path.isdir(xmlFile):#os.path.isdir()用于判断对象是否为一个目录

#如果不是目录,则直接打开

name1=xmlFile.split('.')[0]

print(name1)

dom=xml.dom.minidom.parse(path+'\\'+xmlFile)

#print(dom)

root=dom.documentElement

newfolder=root.getElementsByTagName('folder')

#print(newfolder)

newpath = root.getElementsByTagName('path')

newfilename = root.getElementsByTagName('filename')

newfilename[0].firstChild.data = name1

with open(os.path.join(path, xmlFile), 'w') as fh:

dom.writexml(fh)

#print('写入name/pose OK!')

count = count + 1

参考:CSDN-专业IT技术社区-登录​blog.csdn.net

【图像jpg格式批量转换为png格式技巧】

(1)、首先在你放图片的文件夹里新建一个记事本文件,取名为“图片批量转化”。要注意的一点就是,里面的图片要统一为一种格式。

(2)、如果想将jpg格式批量转化为png格式,那么就在刚才新建的记事本文档里输入“ren *.jpg *.png”。举一反三可知,如果是将png格式转化为jpg,那么就该这样写“ren *.png *.jpg”。这里要强调的一点就是,“ren”与“png”之后要加有一个空格。记事本文档保存后,将后缀名修改为“bat”。

(3)、最后一步就是双击“bat”后缀的这个文件,它会自动弹出一个窗口,不用管它,等几秒后自动消失,然后就发现所有的图片格式都变成我们想要的png格式了。

参考:不用任何软件,批量转化图片格式-百度经验​jingyan.baidu.com

【补充】

XML中的一些属性,比如bndbox中的xmin,ymin,xmax,ymax这四个值,在标记时,如果这些值为负数或者小数,要把他们转换为整数或者不能超越图像边界的值,这时候就需要批量修改。

修改时要注意每个Xml中的这四个值有多个对,也即是每幅图像可能有多个目标,从而对应的bndbox也有多个。

# coding=utf-8

import os

import os.path #批量修改Xml文件中的属性值

import xml.dom.minidom

#打开xml文档

path='E:\python_summary\Xml_Airpalne'

files=os.listdir(path)#得到文件夹下所有文件名称(存到列表)

#print(files)

for xmlFile in files:#遍历文件夹

if not os.path.isdir(xmlFile):#判断是否是文件夹,不是文件夹才打开

#将获取的xml文件名送入到dom解析

#print(xmlFile)

dom=xml.dom.minidom.parse(os.path.join(path,xmlFile))

root=dom.documentElement

#获取标签对

xmin=root.getElementsByTagName('xmin')

ymin=root.getElementsByTagName('ymin')

xmax=root.getElementsByTagName('xmax')

ymax=root.getElementsByTagName('ymax')

#修改属性值

#xmin

for j in range(len(xmin)):

xmin[j].firstChild.data=int(float(xmin[j].firstChild.data))

if (float(xmin[j].firstChild.data)< 0):

xmin[j].firstChild.data=0

print(xmin[j].firstChild.data)

#ymin

for u in range(len(ymin)):

ymin[u].firstChild.data=int(float(ymin[u].firstChild.data))

if (float(ymin[u].firstChild.data)< 0):

ymin[u].firstChild.data=0

print(ymin[u].firstChild.data)

#xmax

for v in range(len(xmax)):

xmax[v].firstChild.data=int(float(xmax[v].firstChild.data))

if (float(xmax[v].firstChild.data)< 0):

xmax[v].firstChild.data=0

print(xmax[v].firstChild.data)

#ymax

for s in range(len(ymax)):

ymax[s].firstChild.data=int(float(ymax[s].firstChild.data))

if (float( ymax[s].firstChild.data)< 0):

ymax[s].firstChild.data=0

print( ymax[s].firstChild.data)

#保存修改到xml文件中

with open(os.path.join(path,xmlFile),'w') as wn:

dom.writexml(wn)

print("修改完成!")

参考:CSDN-专业IT技术社区-登录​blog.csdn.net

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值