python 对xml文件中的节点进行替换,批量处理

作者在研究基于opencv的c++读取xml文件中的深度数据过程中,遇到了一个问题。具体如下:

python 对xml文件中的节点进行替换,批量处理_第1张图片

这是作者找的原xml深度数据文件,但是读取不出来,读取程序如下:

python 对xml文件中的节点进行替换,批量处理_第2张图片

经过研究,自己的c++程序没有问题,问题出在xml中的width与height节点,作者通过尝试发现将width改为cols,同时height改为rows就可以读取出来。

于是问题转化为:如何批量将xml文件中的width与height节点替换为cols与rows

代码如下:

#对xml中的节点进行替换,过程是:先删除不要的节点,再添加需要的节点。
import os
import glob
from xml.etree import ElementTree as ET

xml_dir = r'C:\Users\Carry\Downloads\depth\depth\s01_e01'
xml_list = glob.glob(xml_dir + '/*.xml')
for xml in xml_list: #xml_list是一个数组,存储文件夹下所有xml文件
    name = os.path.basename(xml)
    name = name.split('.')[0] #name表示去掉后缀的文件名

    per = ET.parse(xml) #xml表示xml文件路径
    root = per.getroot()#获取根节点

    src = per.findall(name)  #src是个数组
    src[0].remove(src[0].find('height'))#删除height节点
    src[0].remove(src[0].find('width')) #删除width节点

    cols = ET.Element('cols') #创建cols节点
    cols.text = '320'
    rows = ET.Element('rows') #创建rows节点
    rows.text = '240'
    src[0].insert(0,cols) #插入cols节点,第一个参数表示插入位置,亦可以用append(),但只能插入到src[0]父节点下的末尾
    src[0].insert(1,rows)

    per.write(xml,encoding='utf-8',xml_declaration=True)#该处最好加上后面两个参数,这样重新写入的xml文件中才会包含头部说明

print('修改完成!')

如果只修改某个xml文件,去掉for循环即可

以上代码是将height、width替换为rows,cols。使用者要替换节点为其他名字,稍微修改对应位置即可,无伤大雅

你可能感兴趣的:(xml,python)