使用python从xml文件中提取数据

时间:2018-06-08 15:15:54

标签: python xml

我正在尝试从xml文件中提取数据并将其写入所需格式的文本文件中。我希望以下给定格式的数据写在文本文件中:

bus 616.0 804.0 852 832
car 399.5 630.5 297 259
bus 545.5 983.0 255 54

但我以这种格式获取数据:

[' bus 616.0 804.0 852 832 ', ' car 399.5 630.5 297 259 ', ' bus 545.5 983.0 255 54 ']

这是我的python代码:

import os
from xml.etree import ElementTree
path = 'C:\\Users\\Microsoft\\Desktop\\xmltxt\\xmlfiles'
dirs = os.listdir( path )
savedir='textfiles'
objects =[]
for image_file in (dirs):
    if not os.path.isdir(savedir):
        os.mkdir(savedir)


    dom=ElementTree.parse(os.path.join(path, image_file))
    labels=dom.findall('object')
    for lbl in labels:
       obj_struct = {}
       name=lbl.find('name').text
       bbox = lbl.find('bndbox')
       xmin,xmax,ymin,ymax = int(bbox.find('xmin').text),int(bbox.find('ymin').text),int(bbox.find('xmax').text),int(bbox.find('ymax').text)
       midx=(xmax+xmin)/2
       midy=(ymax+ymin)/2
       wid=abs(xmax-xmin)
       hgt=abs(ymax-ymin)


       values=(' {} {} {} {} {} '.format(name,midx,midy,wid,hgt))
       print (values)
       objects.append(values)




    save_path = os.path.join(savedir, image_file.replace('xml', 'txt'))
    with open(save_path, 'w') as temp_xml:

        temp_xml.write(str(objects)) 

1 个答案:

答案 0 :(得分:0)

objects是一个列表。因此,如果你写它,你将获得一个列表的再现。但实际上你需要分别使用每一行。

您需要将输出代码更改为以下内容:

with open(save_path, 'w') as temp_xml:
    temp_xml.write('\n'.join([str(x).strip() for x in objects])) 

更新:如上所述,如果此行删除空格,则不需要其中一些:

   values=(' {} {} {} {} {} '.format(name,midx,midy,wid,hgt))

应该是

   values=('{} {} {} {} {}'.format(name,midx,midy,wid,hgt))

然后它可以简化为

with open(save_path, 'w') as temp_xml:
    temp_xml.write('\n'.join(objects))