Присоединение объекта одного XML файла к другому XML файлу - PullRequest
0 голосов
/ 18 января 2020

Я выполняю обнаружение объектов, в котором у меня есть два XML файла, которые я хочу добавить XML объектов, отсутствующих в файле XML, к новым XML файлам.

Пожалуйста, помогите мне с этим. Я написал код, который создает объектную архитектуру, если кто-нибудь может помочь мне добавить этот объект в другой XML, что было бы здорово.

import os
import xml.etree.ElementTree as ET
import glob

Old_XML_Location = "..."
New_XML_Location = "..."

for new_xml_file in glob.glob(New_XML_Location + '/*.xml'):
    for old_xml_file in glob.glob(Old_XML_Location + '/*.xml'):
        print(old_xml_file)
        if os.path.basename(new_xml_file) == os.path.basename(old_xml_file):
            #xml_list = []
            tree = ET.parse(new_xml_file)
            root = tree.getroot()
            for member in root.findall('object'):
                print(member[0].text)
                #if member[0].text == "Time":
                value = (member[0].text,
                         int(member[4][0].text),
                         int(member[4][1].text),
                         int(member[4][2].text),
                         int(member[4][3].text)
                         )
                xlobject=ET.Element("object")
                root.append(xlobject)
                xlbname=ET.SubElement(xlobject,"name")
                xlbname.text = value[0]
                pose=ET.SubElement(xlobject,"pose")
                pose.text="Unspecified"        
                truncate=ET.SubElement(xlobject,"truncated")
                truncate.text="0"        
                difficult=ET.SubElement(xlobject,"difficult")
                difficult.text="0"    
                bndbox=ET.SubElement(xlobject,"bndbox")
                tree = ET.ElementTree(root)        
                xlxmin=ET.SubElement(bndbox,"xmin")
                xlxmin.text=str(int(value[1]))         
                xlymin=ET.SubElement(bndbox,"ymin")
                xlymin.text=str(int(value[2]))        
                xlxax=ET.SubElement(bndbox,"xmax")
                xlxax.text=str(int(value[3]))        
                xlymax=ET.SubElement(bndbox,"ymax")
                xlymax.text=str(int(value[4]))
                tree = ET.ElementTree(root)
                tree.write(old_xml_file)
                # with open(old_xml_file, "w") as fh:
                #   fh.write(tree)
                # else :
                #   print("False") 

1 Ответ

0 голосов
/ 07 апреля 2020

Пока что используя ваш код и немного прибегая к помощи, я объединил xmls для класса ball и no-ball. Вот код

# -*- coding: utf-8 -*-
"""
Created on Mon Apr  6 06:24:41 2020

@author: sahab
"""


import os
import xml.etree.ElementTree as ET
import glob

for new_xml_file in glob.glob(r'E:\Cricket\Cricket\ball\*.xml'):
    for old_xml_file in glob.glob(r'E:\Cricket\Cricket\noball\\' + os.path.basename(new_xml_file)):
            print(old_xml_file)
            old_tree = ET.parse(old_xml_file)
            old_root = old_tree.getroot()
            tree = ET.parse(new_xml_file)
            root = tree.getroot()
            for member in root.findall('object'):
                print(member[0].text)
                #if member[0].text == "Time":
                value = (member[0].text,
                          int(member[4][0].text),
                          int(member[4][1].text),
                          int(member[4][2].text),
                          int(member[4][3].text)
                          )
                print(value)
                xlobject=ET.Element("object")
                xlbname=ET.SubElement(xlobject,"name")
                xlbname.text = value[0]
                pose=ET.SubElement(xlobject,"pose")
                pose.text="Unspecified"        
                truncate=ET.SubElement(xlobject,"truncated")
                truncate.text="0"        
                difficult=ET.SubElement(xlobject,"difficult")
                difficult.text="0"    
                bndbox=ET.SubElement(xlobject,"bndbox")
                tree = ET.ElementTree(root)        
                xlxmin=ET.SubElement(bndbox,"xmin")
                xlxmin.text=str(int(value[1]))         
                xlymin=ET.SubElement(bndbox,"ymin")
                xlymin.text=str(int(value[2]))        
                xlxax=ET.SubElement(bndbox,"xmax")
                xlxax.text=str(int(value[3]))        
                xlymax=ET.SubElement(bndbox,"ymax")
                xlymax.text=str(int(value[4]))
                old_root.append(xlobject)
            with open(r'E:\Cricket\Cricket\combined\\' +os.path.basename(new_xml_file), "w") as fh:
                tree = ET.ElementTree(old_root)
                r = old_tree.getroot()
                print (ET.tostring(r))
                fh.write(ET.tostring(r).decode("utf-8"))
...