使用ElementTree

时间:2018-03-16 06:41:43

标签: python xml elementtree

我有一堆视频和XML文件,其中包含有关文件中对象的数据。我正在尝试编写一些函数,将每个视频的每个帧与该视频XML文件进行比较,但是当我遍历根的子子元素并打印其属性时,并未找到所有对象。示例XML文件链接here

我写了这两个函数

def setUP():
    os.chdir('/home/abdi/Desktop/TestOpt/FishCLEF2015- TestDataset/Combined/')
    listOfGT=[]



 for file in glob.glob("*.flv"):
        number,types=file.split(".")
        listOfGT.append(number)
    #print(len(listOfGT))
    total=0
    for names in listOfGT:
        total+=1
        print ("**** New File is {} ****".format(str(names) +".xml"))

        tree = ET.parse(str(names) + ".xml")  
        root = tree.getroot()
        NumberOfframes=LastFrames(root)
        for frames in root:
            print("For Frame: {}".format(frames.attrib["id"]))
            jakoObject(frames,NumberOfframes,names)

这通过循环查找根结构的所有文件并循环遍历每个子列表(对应于图像中的1帧)来设置所有内容

def jakoObject(frames,NumberOfframes,names):
cam = cv.VideoCapture(str(names) + ".flv")
frame_count=0
while frame_count != NumberOfframes:
    ret,frame = cam.read()
    attrib=frames.attrib["id"]

    if (frame_count==NumberOfframes):
        print("Yatta")
        break
    else:
        frame_count+=1

    if (frame_count==int(attrib)):
        for objects in frames:
            # print("For Frame: {} and object {}".format(frames.attrib["id"],franmes.objects.attrib["id"]))
            print(objects.attrib)

然后我使用此函数来播放视频,如果当前帧编号等于通过根结构找到的当前帧编号,则启动通过每个名为对象的子列表的循环。

我已经打印过该文件的归属。然而,发生的情况是,对于许多“对象”子列表,没有找到属性。但是在同一XML文件中找到另一个框架的属性。

对于上面链接的文件,输出为

output

1 个答案:

答案 0 :(得分:0)

通过添加行

来检查会发生什么
print(frame_count, attrib, NumberOfframes)

jakoObject中的

attrib=frames.attrib["id"]

然后你应该明白为什么要跳过它。