使用 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)
初始文件
<annotation>
  <folder>VOC2007</folder>
  <filename>T2019_4_18_30.jpg</filename>
  <source>
    <annotation>PASCAL VOC2007</annotation>
    <database>Unknown</database>
    <image>flickr</image>
  </source>
  <size>
    <width>919</width>
    <height>878</height>
    <depth>3</depth>
  </size>
  <object>
    <name>pos</name>
    <pose>0</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>1</xmin>
      <ymin>336</ymin>
      <xmax>96</xmax>
      <ymax>504</ymax>
    </bndbox>
  </object>
</annotation>
添加节点之后的文件红色节点是添加节点之后的结果
<annotation>
  <folder>VOC2007</folder>
  <filename>T2019_4_18_30.jpg</filename>
  <source>
    <annotation>PASCAL VOC2007</annotation>
    <database>Unknown</database>
    <image>flickr</image>
  </source>
  <size>
    <width>919</width>
    <height>878</height>
    <depth>3</depth>
  </size>
  <object>
    <name>pos</name>
    <pose>0</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>1</xmin>
      <ymin>336</ymin>
      <xmax>96</xmax>
      <ymax>504</ymax>
    </bndbox>
  </object>
  <object>
    <name>pos</name>
    <pose>0</pose>
    <truncated>0</truncated>
    <difficult>0</difficult>
    <bndbox>
      <xmin>806</xmin>
      <ymin>59</ymin>
      <xmax>918</xmax>
      <ymax>274</ymax>
    </bndbox>
  </object>
</annotation>
12-30 11:36
查看更多