使用from lxml import etree
不要使用from xml.etree.ElementTree import ElementTree,Element
注意一定要使用parser = etree.XMLParser(remove_blank_text=True)这个参数。
代码:
parser = etree.XMLParser(remove_blank_text=True)#
root=etree.parse('annotation/' + basename + '_' + str(x) + '_' + str(y) + '.xml',parser)#第一个参数是已经存在的文件
add_pic_attr(root, "pos", int(x_), int(y_), int(x_w), int(y_h))#向文件中添加节点的函数,后面5个参数是节点的信息
tree = etree.ElementTree(root.getroot())
tree.write('annotation/' + basename + '_' + str(x) + '_' + str(y) + '.xml',pretty_print=True, xml_declaration=False, encoding='utf-8')
#向文件中添加节点的函数,后面5个参数是节点的信息
def add_pic_attr(root,label,xmin,ymin,xmax,ymax):
object = etree.Element("object")
namen = etree.SubElement(object,"name")
namen.text = label
object.append(namen)
pose = etree.SubElement(object,"pose")
pose.text = str(0)
object.append(pose)
truncated = etree.SubElement(object,"truncated")
truncated.text = str(0)
object.append(truncated)
difficult = etree.SubElement(object,"difficult")
difficult.text = str(0)
object.append(difficult)
bndbox = etree.SubElement(object,"bndbox")
xminn = etree.SubElement(bndbox,"xmin")
xminn.text = str(xmin)
bndbox.append(xminn)
yminn = etree.SubElement(bndbox,"ymin")
yminn.text = str(ymin)
bndbox.append(yminn)
xmaxn = etree.SubElement(bndbox,"xmax")
xmaxn.text = str(xmax)
bndbox.append(xmaxn)
ymaxn = etree.SubElement(bndbox,"ymax")
ymaxn.text = str(ymax)
root.getroot().append(object)
初始文件
VOC2007
T2019_4_18_30.jpg
PASCAL VOC2007
Unknown
flickr
919
878
3
pos
0
0
0
1
336
96
504
添加节点之后的文件,红色节点是添加节点之后的结果
VOC2007
T2019_4_18_30.jpg
PASCAL VOC2007
Unknown
flickr
919
878
3
pos
0
0
0
1
336
96
504
pos
0
0
0
806
59
918
274