json文件批量转换xml

编程入门 行业动态 更新时间:2024-10-26 21:21:36

json文件<a href=https://www.elefans.com/category/jswz/34/1668910.html style=批量转换xml"/>

json文件批量转换xml

在参加比赛时,官方给出的标记文件是json格式,自己编写代码使其转换为xml格式。使用的是Python 标准库之 xml.etree.ElementTree。

官方给出的格式:

转换代码如下:

import os, json
import copyimport cv2
import numpy as np
try:import xml.etree.cElementTree as ElementTree
except ImportError:import xml.etree.ElementTree as ElementTree# <Element 'data' at 0x0000021AE8F79540>  type:<class 'xml.etree.ElementTree.Element'>template_file = '../intelligent/1.xml'  # xml模板
target_dir = r'./xmll/'   # 保存路径
image_dir = r'./picture/'  # 图片文件夹train_file = '../intelligent/labels/'   # 存储了图片信息的json文件
file_nameee = ''
json_path = './labels'
# 提取json
def parse_json(d):arr = np.array([d['image_name'], d['ignore'],d['category_name'],d['id'],d['occlusion'],d['truncation'],d['bbox']])return arrdef chinese_english(str):if str == 'suv':str = 'suv'elif str == '专业作业车':str = 'Professional_work_car'elif str == '儿童':str = 'children'elif str == '面包车':str = 'Van_minibus'elif str == '大客车':str = 'bus'elif str == '大货车':str = 'Big_truck'elif str == '小货车':str = 'buggy'elif str == '成年人':str = 'adult'elif str == '电动/摩托三轮车':str = 'Electric_tricycle'elif str == '电动/摩托车':str = 'Electric_motorcycle'elif str == '自行车':str = 'bcycle'elif str == '轿车':str = 'car'else:str = 'other'return strdef read_xml(in_path):'''''读取并解析xml文件in_path: xml路径return: ElementTree'''print(in_path)#prese()解析xml文件tree = ElementTree.parse(in_path)return tree
def tiqu(strrr):new_str = ""  # 创建一个空字符串for ch in strrr:if ch.isdigit():  # 字符串中的方法,可以直接判断ch是否是数字new_str += chelse:new_str += " "sub_list = new_str.split()  # 对新的字符串切片num_list = list(map(int, sub_list))  # map方法,使列表中的元素按照指定方式转变return num_listdir = os.listdir(json_path)
for file in dir:trainfiles = json.load(open(train_file+file,encoding='UTF-8'))len_nn = len(trainfiles)#tree = ElementTree()for k, line in enumerate(trainfiles):arr = parse_json(line)file_name = arr[0]  # 文件名print(file_name)file_nameee = file_nameif k == 0:print(11)label = arr[2]  # 标签名# 坐标label = chinese_english(label)xmin = str(int(arr[6][0] - arr[6][2] / 2))xmax = str(int(arr[6][0] + arr[6][2] / 2))  #ymin = str(int(arr[6][1] - arr[6][3] / 2))ymax = str(int(arr[6][1] + arr[6][3] / 2))tree = read_xml(template_file)  # 解析树root = tree.getroot()  # 根节点root.find('filename').text = file_name# sizesz = root.find('size')imggg = image_dir + file_nameim = cv2.imread(imggg)  # 读取图片信息str1 = arr[4]str2 = arr[5]tiqu_str1 = tiqu(str1)tiqu_str2 = tiqu(str2)print(tiqu_str1)print(tiqu_str2)sz.find('height').text = str(im.shape[0])sz.find('width').text = str(im.shape[1])sz.find('depth').text = str(im.shape[2])# objectobj = root.find('object')obj.find('name').text = labelif tiqu_str1[0] == 0 and tiqu_str2[0] == 0:obj.find('truncated').text = str(0)else:obj.find('truncated').text = str(1)bb = obj.find('bndbox')bb.find('xmin').text = xminbb.find('ymin').text = yminbb.find('xmax').text = xmaxbb.find('ymax').text = ymax# 有多个标签需要添加objectelse:label = arr[2]label = chinese_english(label)xmin = str(int(arr[6][0] - arr[6][2] / 2))xmax = str(int(arr[6][0] + arr[6][2] / 2))  #ymin = str(int(arr[6][1] - arr[6][3] / 2))ymax = str(int(arr[6][1] + arr[6][3] / 2))obj_ori = root.find('object')obj = copy.deepcopy(obj_ori)  # 注意这里深拷贝str1 = arr[4]str2 = arr[5]tiqu_str1 = tiqu(str1)tiqu_str2 = tiqu(str2)if tiqu_str1[0] == 0 and tiqu_str2[0] == 0:obj.find('truncated').text = str(0)else:obj.find('truncated').text = str(1)obj.find('name').text = labelbb = obj.find('bndbox')bb.find('xmin').text = xminbb.find('ymin').text = yminbb.find('xmax').text = xmaxbb.find('ymax').text = ymaxroot.append(obj)xml_file = file_nameee.replace('jpg','xml')print("deakpf"+xml_file)tree.write(target_dir + xml_file, encoding='utf-8')

更多推荐

json文件批量转换xml

本文发布于:2023-07-04 10:09:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1023080.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:批量转换   文件   json   xml

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!