• xml_以字典形式返回xml文件中的标注信息


    传入:存储 xml 的根路径

    返回:一个 xml 文件中的标注存储为一条字典记录,返回出入根路径中所有 xml 标记的数据信息

     1 import os
     2 import xml.dom.minidom
     3 
     4 ### 传入存储 xml 文件的根路径 --> 以字典的形式返回 xml 文件中存储的数据信息,一个 xml 文件构成一条字典记录
     5 def xml_label_names(xml_root_path):
     6     xml_files = os.listdir(xml_root_path)
     7     # print(xml_root_path, ' 路径下有文件个数:', len(xml_files))
     8     xml_dict_list = []
     9     for xml_file in xml_files:
    10         xml_path = os.path.join(xml_root_path, xml_file)
    11         # 打开xml文档
    12         DOMTree = xml.dom.minidom.parse(xml_path)
    13         # 得到文档元素对象
    14         collection = DOMTree.documentElement
    15 
    16         ### 获取文件夹名和文件名
    17         folder_name = collection.getElementsByTagName("folder")[0].childNodes[0].data
    18         filename = collection.getElementsByTagName("filename")[0].childNodes[0].data
    19         # print('\n', 'folder_name: {}  ,filename {}'.format(folder_name, filename))
    20 
    21         ### 获取 xml 标记中的 size 信息
    22         size_list = collection.getElementsByTagName("size")
    23         size_depth = size_list[0].getElementsByTagName('depth')[0].childNodes[0].data
    24         size_width = size_list[0].getElementsByTagName('width')[0].childNodes[0].data
    25         size_height = size_list[0].getElementsByTagName('height')[0].childNodes[0].data
    26         # print('size 部分:  depth: {} ,\t {} ,\theight: {}'.format(size_depth, size_width, size_height))
    27 
    28         ### 得到标签名为object的信息
    29         objectlist = collection.getElementsByTagName("object")
    30         bbox_list = []
    31         for objects in objectlist:
    32             ### 获得标记框的标签名,每个 object 中得到子标签名为 name 的信息
    33             bndbox_label = objects.getElementsByTagName('name')[0].childNodes[0].data
    34             if bndbox_label == 'D00':
    35                 bndbox_label = 'D01'
    36                 # print('标签名原为 D00 , 现改为 D01')
    37             elif bndbox_label == 'D01':
    38                 bndbox_label = 'D00'
    39                 # print('标签名原为 D01 , 现改为 D00')
    40             elif bndbox_label == 'D10':
    41                 bndbox_label = 'D11'
    42                 # print('标签名原为 D10 , 现改为 D11')
    43             elif bndbox_label == 'D11':
    44                 bndbox_label = 'D10'
    45                 # print('标签名原为 D11 , 现改为 D10')
    46             ### 获取标记框的标记信息, 每个 bndbox 中只有一组标记框信息
    47             bndbox = objects.getElementsByTagName('bndbox')
    48             xmin = int(bndbox[0].getElementsByTagName('xmin')[0].childNodes[0].data)
    49             ymin = int(bndbox[0].getElementsByTagName('ymin')[0].childNodes[0].data)
    50             xmax = int(bndbox[0].getElementsByTagName('xmax')[0].childNodes[0].data)
    51             ymax = int(bndbox[0].getElementsByTagName('ymax')[0].childNodes[0].data)
    52             bbox = [xmin, ymin, xmax, ymax]
    53             bbox_list.append([bndbox_label, bbox])
    54             # print('标签名 {}, \t标签名类型 {}, \t标记框 {}'.format(bndbox_label, type(bndbox_label), bbox))
    55 
    56         ### 向字典中添加数据
    57         xml_dict = {'folder_name':folder_name,
    58                     'filename':filename,
    59                     'size_depth':size_depth, 'size_width':size_width, 'size_height':size_height,
    60                     'objects':bbox_list}
    61         # print(xml_dict)
    62         xml_dict_list.append(xml_dict)
    63     return xml_dict_list
    64 
    65 
    66 xml_root_path = '../data/xml'   # 存储 xml 的根路径
    67 xml_dict_list = xml_label_names(xml_root_path)  # 传入 xml 的根路径,显示 xml 中所有的数据信息
    68 for i, xml_dict in enumerate(xml_dict_list):
    69     print('{:<4d} {}'.format(i, xml_dict))

    运行结果如下:

    1 0    {'folder_name': 'images', 'filename': 'Czech_003467.jpg', 'size_depth': '3', 'size_width': '600', 'size_height': '600', 'objects': [['D01', [348, 459, 392, 528]], ['D11', [212, 452, 273, 471]], ['D01', [66, 467, 113, 517]], ['D01', [128, 437, 183, 508]]]}
    2 1    {'folder_name': 'images', 'filename': 'Czech_003510.jpg', 'size_depth': '3', 'size_width': '600', 'size_height': '600', 'objects': [['D11', [1, 466, 171, 485]], ['D11', [1, 446, 171, 465]], ['D40', [135, 408, 201, 436]]]}
  • 相关阅读:
    分页查询SQL语句
    屏蔽Ctrl+C
    RichtextBox 控件小节
    必须掌握的八个CMD命令
    [唠叨两句]一个关于OpenFileDialog 影响 相对路径的问题
    反序列化出现异常:SerializationException 在分析完成之前就遇到流结尾
    Static块(静态代码块)
    Java ServletContext 详解
    tomcat中conf\Catalina\localhost目录下的J2EE项目METAINF配置文件
    关于【apache tomcat 5.5.15/conf /Catalina/localhost配置虚拟目录】时的一些问题。(配置web项目的方式不止一种,虚拟目录就是一个)
  • 原文地址:https://www.cnblogs.com/lyj0123/p/15682300.html
Copyright © 2020-2023  润新知