一、功能介绍
这段代码的功能是从指定的目录中读取所有的XML文件,并统计这些文件中特定标签(<object>
标签内的<name>
标签)的内容和出现次数。
二、代码
import os
import xml.etree.ElementTree as ET
import glob
def count_num(indir):
label_list = []
# 更改当前工作目录到指定的目录
os.chdir(indir)
# 获取当前目录下所有的文件名
annotations = os.listdir('.')
# 使用glob获取当前目录下所有的XML文件
annotations = glob.glob('*.xml')
# 初始化一个空字典来存储各个标签的计数
dict = {}
# 遍历所有的XML文件
for i, file in enumerate(annotations):
# 打开XML文件
in_file = open(file, encoding='utf-8')
# 解析XML文件
tree = ET.parse(in_file)
# 获取XML文档的根节点
root = tree.getroot()
# 遍历XML文档中的所有<object>元素
for obj in root.iter('object'):
# 获取<object>元素内的<name>标签文本
name = obj.find('name').text
# 如果标签名已经存在于字典中
if name in dict.keys():
# 将该标签名对应的值加一
dict[name] += 1
# 如果标签是'face',则打印出文件名
if name == 'face':
print(file)
else:
# 如果标签名不在字典中,则添加该标签名并将值设为1
dict[name] = 1
# 如果标签是'face',则打印出文件名
if name == 'face':
print(file)
# 打印所有标签名及对应的数量
print("各类标签的数量分别为:")
for key in dict.keys():
print(key + ': ' + str(dict[key]))
label_list.append(key)
# 打印所有不同的标签名称
print("标签类别如下:")
print(label_list)
# 主程序入口
if __name__ == '__main__':
# 设置输入目录
indir = r'E:\pythonProject\pythonProject\NEU-DET\xmls'
# 调用函数统计各类标签数目
count_num(indir)
以东北大学钢材表面缺陷检测数据集为例,设置好xml文件夹的绝对路径,运行结果如下: