python解析XML常见的有三种方法:
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- # get annotation object bndbox location
- try:
- import xml.etree.cElementTree as ET #解析xml的c语言版的模块
- except ImportError:
- import xml.etree.ElementTree as ET
-
- ##get object annotation bndbox loc start
- def GetAnnotBoxLoc(AnotPath):#AnotPath VOC标注文件路径
- tree = ET.ElementTree(file=AnotPath) #打开文件,解析成一棵树型结构
- root = tree.getroot()#获取树型结构的根
- ObjectSet=root.findall('object')#找到文件中所有含有object关键字的地方,这些地方含有标注目标
- ObjBndBoxSet={} #以目标类别为关键字,目标框为值组成的字典结构
- for Object in ObjectSet:
- ObjName=Object.find('name').text
- BndBox=Object.find('bndbox')
- x1 = int(BndBox.find('xmin').text)#-1 #-1是因为程序是按0作为起始位置的
- y1 = int(BndBox.find('ymin').text)#-1
- x2 = int(BndBox.find('xmax').text)#-1
- y2 = int(BndBox.find('ymax').text)#-1
- BndBoxLoc=[x1,y1,x2,y2]
- if ObjBndBoxSet.__contains__(ObjName):
- ObjBndBoxSet[ObjName].append(BndBoxLoc)#如果字典结构中含有这个类别了,那么这个目标框要追加到其值的末尾
- else:
- ObjBndBoxSet[ObjName]=[BndBoxLoc]#如果字典结构中没有这个类别,那么这个目标框就直接赋值给其值吧
- return ObjBndBoxSet
- ##get object annotation bndbox loc end
-
返回结果: