VOC格式的xml文件内容修改

由于想把xml文件中的图像通道数由3改为1,尝试单通道图片的训练,需要改动depth标签所对应的值:
先是在ubuntu系统下,用的python,代码如下:

#coding=utf-8
import os
import os.path
import xml.dom.minidom
path_xml = "/media/linux_data/gray/YOLOv3/fileStore/darknet-master/VOCdevkit/VOC2007/OneChannelsAnnotations/"#Annotations/"
path_xml2 =  "/media/linux_data/gray/YOLOv3/fileStore/darknet-master/VOCdevkit/VOC2007/One2/"
files = os.listdir(path_xml)#获得文件夹下所有文件
s = []
for xmlFile in files:
	if not os.path.isdir(xmlFile):
		print xmlFile
		print xmlFile
		#xml读取操作,将获取到的xml文件名送入到dom中解析
		dom = xml.dom.minidom.parse(os.path.join(path_xml,xmlFile))
		root = dom.documentElement
		#获取标签对depth之间的值: 1
		depth = root.getElementsByTagName('depth')
		#遍历方式,修改相应标签的值
		for i in range(len(depth)):
			print depth[i].firstChild.data
			a = depth[i].firstChild.data
			print(type(a))
			depth[i].firstChild.data=1
			print depth[i].firstChild.data
		#保存修改到xml文件中
		with open(os.path.join(path_xml2,xmlFile),'w') as fh:
			dom.writexml(fh)
			print('depth rewrite.\n')

可以读取xml文件的内容,但是有一些问题,在遇到xml文件中的路径或是其他地方含有中文时,倒数第二句另存为xml文件时会出错。
网上有写在倒数第二句改为:

 dom.writexml(fh,encoding='utf-8')

但是还是没有用,于是转到win10系统下采用MATLAB进行xml文件的修改:

%read jpgs and xmls, then draw rectangles
pathin = 'E:\数据(内部)\dataset(公开)\';
loop = [6298,7267];
%  xmin = zeros(4,1);
%  ymin = zeros(4,1);
figure;
for i = loop(1):loop(2)%6568:6568%
   clf
    img = imread([pathin,num2str(i),'.jpg']);
    xDoc = xmlread([pathin,num2str(i),'.xml']);
    root = xDoc.getDocumentElement;
%     object0 = root.getElementsByTagName('object');
%     object = object0.item(0);
%     bndbox0 = object.getElementsByTagName('bndbox');
%     bndbox = bndbox0.item(0);
    xmin0 = root.getElementsByTagName('xmin');
    ymin0 = root.getElementsByTagName('ymin');
    xmax0 = root.getElementsByTagName('xmax');
    ymax0 = root.getElementsByTagName('ymax');
    imshow(img,[])
for j = 1:xmin0.getLength
        a = char(xmin0.item(j-1).getTextContent());
        b = char(ymin0.item(j-1).getTextContent());
        c = char(xmax0.item(j-1).getTextContent());
        d = char(ymax0.item(j-1).getTextContent());
        xmin = str2double(a);
        ymin = str2double(b);
        xmax = str2double(c);
        ymax = str2double(d);
        w = (xmax - xmin + 1);
        h = (ymax - ymin + 1);
        xcenter = xmin;% + w - 1;
        ycenter = ymin;% + h - 1;
        rectangle('position',[xcenter,ycenter,w,h],'edgecolor','r');
end
    pause( )
end

可以实现包含中文的xml文件的修改和另存为,且另存为的xml文件的第一句注释会包含coding = utf-8,可能需要先用python将xml文件转换为中文格式才行吧。

你可能感兴趣的:(python学)