from lxml.etree import Element, SubElement, tostring
from xml.dom.minidom import parseString
import os
def make_xml(f,save_xml_path):
# 第一层循环遍历所有的照片
for line in f:
lines = str(line).split(' ')
box_num = len(lines)-2
pic_name = str(lines[0])
node_root = Element('annotation')
node_filename = SubElement(node_root, 'filename')
# 图片名字
node_filename.text = pic_name
# 第二层循环遍历有多少个框
for i in range(box_num):
bbox = str(lines[i+2]).split(',')
cls_name = bbox[-2]
node_object = SubElement(node_root, 'object')
node_name = SubElement(node_object, 'name')
# 类别名字
node_name.text = class_name(cls_name)
node_bndbox = SubElement(node_object, 'bndbox')
node_xmin = SubElement(node_bndbox, 'xmin')
node_xmin.text = str(int(bbox[0]))
node_ymin = SubElement(node_bndbox, 'ymin')
node_ymin.text = str(int(bbox[1]))
node_xmax = SubElement(node_bndbox, 'xmax')
node_xmax.text = str(int(bbox[2]))
node_ymax = SubElement(node_bndbox, 'ymax')
node_ymax.text = str(int(bbox[3]))
xml = tostring(node_root, pretty_print = True)
dom = parseString(xml)
#print xml 打印查看结果
xml_name = pic_name.replace(".jpg","")
xml_name = os.path.join(save_xml_path, xml_name + '.xml')
with open(xml_name, 'wb') as f:
f.write(dom.toprettyxml(indent='\t', encoding='utf-8'))
txt_path = '/home/yxq/桌面/xxx/new_train.txt'
save_xml_path = '/home/yxq/桌面/xxx/Annotations'
f = open(txt_path,'r')
f = f.readlines()
make_xml(f,save_xml_path)
来源:CSDN
作者:SanJin_Young
链接:https://blog.csdn.net/yangxinquan123/article/details/103429229