目录

1.获取xml文件中所有标签名称及数量

2.提取某个特定标签的数量

3.生成包含某个标签的图片索引txt并复制图片到指定文件夹


1.获取xml文件中所有标签名称及数量

【需求】自己标注的数据集,想要看看有多少个标签,并且想知道每一个标签的数量,又或者是需在标注完成后需要对标注好的XML文件校验,比如看看标签名有没有写错,都有啥标签名。

代码如下,只需将【indir】字段换成自己需要统计的xml的文件夹,随后运行即可~~~

import os
from unicodedata import name
import xml.etree.ElementTree as ET
import globdef count_num(indir):# 提取xml文件列表os.chdir(indir)annotations = os.listdir('.')annotations = glob.glob(str(annotations) + '*.xml')dict = {}  # 新建字典,用于存放各类标签名及其对应的数目for i, file in enumerate(annotations):  # 遍历xml文件# actual parsingin_file = open(file, encoding='utf-8')tree = ET.parse(in_file)root = tree.getroot()# 遍历文件的所有标签for obj in root.iter('object'):name = obj.find('name').textif (name in dict.keys()):dict[name] += 1  # 如果标签不是第一次出现,则+1else:dict[name] = 1  # 如果标签是第一次出现,则将该标签名对应的value初始化为1KeyDict = sorted(dict)# 打印结果print("%d kind labels and %d labels in total" % (len(KeyDict), sum(dict.values())))print('labels:',KeyDict)print('\n')print("Label Name and it's number//各类标签的数量分别为:")for key in dict.keys():print(key + ': ' + str(dict[key]))print("\n总标签数目:{}个".format(sum(dict.values())))print('\t')print('检索完成!')indir = '/data_1T/xd1/VOCdevkit/VOC2012/Annotations/'  # xml文件所在的目录count_num(indir)  # 调用函数用来统计各类标签数目

2.提取某个特定标签数量

【需求】自己标注的数据集,想要看看某个标签有多少个,又或者是需在标注完成后需要对标注好的XML文件校验。

代码如下,需将下面几个字段进行修改,随后运行即可~~~

【test_dir】【train_dir】【trainval_dir】【xml_dir】【label】

# -- coding: utf-8 --import pickle
import os
import glob
from os import listdir, getcwd
from os.path import join
import xml.etree.ElementTree as ET  # 导入xml模块test_dir = '/data_1T/xd1/VOCdevkit/VOC2012/ImageSets/Main/test.txt'         #修改读取的test_dir文件路径
train_dir = '/data_1T/xd1/VOCdevkit/VOC2012/ImageSets/Main/train.txt'       #修改读取的train_dir文件路径
trainval_dir = '/data_1T/xd1/VOCdevkit/VOC2012/ImageSets/Main/trainval.txt' #修改读取的trainval_dir文件路径xml_dir = '/data_1T/xd1/VOCdevkit/VOC2012/Annotations/'  # 修改保存xml文件的路径read_xmlfile = trainval_dir   #修改读取的xml文件索引路径xml_index = open(read_xmlfile).readlines()
print('【{}】中XML文件的数量为'.format(read_xmlfile),len(xml_index),'个')  # 计算测试集的xml文件的数量label  = 'metal'     #修改检索指定标签的名字
nums = 0
c = 0
for i in range(len(xml_index)):index = xml_index[i].strip('\n')  # 截取xml文件名# print(xml_dir+index+'.xml')xml_file = open(xml_dir + index + '.xml', encoding="utf-8")xml = ET.parse(xml_file)for name in xml.iter('object'):nums = nums + 1if name.find("name").text == label:  # 按标注的标签名进行统计c = c + 1xml_file.close()print('标签为',label,'的个数:', c)
print('\t')
print('检索完成!')

3.生成包含某个标签的图片索引txt并复制图片到指定文件夹

【需求】经过上述步骤,发现自己标注的数据集有个标签是标注错的,想自己看下是那个文件的错误,又或者自己想把它删除,下面代码可以解决!!!

代码如下,需将下面几个字段进行修改,随后运行即可~~~

【test_dir】【train_dir】【trainval_dir】【xml_dir】【label】

# -- coding: utf-8 --import xml.etree.ElementTree as ET  # 导入xml模块
import ostest_dir = '/data_1T/xd1/VOCdevkit/VOC2012/ImageSets/Main/test.txt'  # 修改读取的test_dir文件路径
train_dir = '/data_1T/xd1/VOCdevkit/VOC2012/ImageSets/Main/train.txt'  # 修改读取的train_dir文件路径
trainval_dir = '/data_1T/xd1/VOCdevkit/VOC2012/ImageSets/Main/trainval.txt'  # 修改读取的trainval_dir文件路径xml_dir = '/data_1T/xd1/VOCdevkit/VOC2012/Annotations/'  # 修改保存xml文件的路径read_xmlfile = trainval_dir  # 修改读取的xml文件索引路径xml_index = open(read_xmlfile).readlines()save_file = "./"          # 保存包含指定标签的图片的索引文件txt
if not os.path.exists(save_file):os.makedirs(save_file)label  = 'd'     #修改检索指定标签的名字fsave = open(save_file + "/label【{}】_imgpath.txt".format(label), "w", encoding="utf-8")\for i in range(len(xml_index)):index = xml_index[i].strip('\n')  # 截取xml文件名# print(xml_dir+index+'.xml')xml_file = open(xml_dir + index + '.xml', encoding="utf-8")xml = ET.parse(xml_file)for path in xml.iter('annotation'):for name in path.iter('object'):if name.find("name").text == label:img_path = path.find('path').text.split("\\")[-1]fsave.write(img_path + '\n')print("开始生成包括label为【{}】的图片索引文件!".format(label))
print("生成结束//extract label success!")

 生成的指定标签图片索引txt为:

【需求】那么,找到文件是什么,怎么把这些图片提取出来呢?

下面代码帮你解决!

代码如下,需将下面几个字段进行修改,随后运行即可复制图片到指定文件夹~~~

【path】【save_img_path】【read_label_file】

# -- coding: utf-8 --
import os, shutilpath = '/data_1T/xd1/VOCdevkit/VOC2012//JPEGImages/'     #原数据集图片文件夹
img_path = os.listdir(path)save_img_path = './mail_box_img/'      #存放提取出来的图片文件夹
if not os.path.exists(save_img_path):os.makedirs(save_img_path)read_label_file = './label【d】_imgpath.txt'    #上一步生成的包含指定标签的txt索引文档f = open(read_label_file, "r")
while True:line = f.readline()for img in img_path:if img.split('.')[0] == line.split('.')[0]:print('包含指定label的图片为:',img)shutil.copy(path + img, save_img_path + img)if not line:break

生成的图片文件夹为:

好了,大功告成,完结撒花!

欢迎关注、点赞、收藏、评论、分享给好友,一起学习有趣的新知识!!!

【XML文件数据预处理】获取xml文件中所有标签名称及数量||提取某个特定标签的数量||生成包含某个标签的图片索引txt并复制图片到指定文件夹相关推荐

  1. js/jquery 获取本地文件的文件路劲 获取input框中type=‘file’ 中的文件路径(转载)...

    原文:http://blog.csdn.net/niyingxunzong/article/details/16989947 js/jquery 获取本地文件的文件路劲 获取input框中type=' ...

  2. C#下把txt文件数据读进sql server中存储所遇到的乱码问题

    txt文件的默认编码为ANSI,C#的默认读取数据便秘为UTF-8 这样的话就会造成文本数据格式的显示乱码问题 解决问题的方式有两种 一是改变txt文件的编码,改为UTF-8 另一种是在读入txt文件 ...

  3. xml的数据交换以及xml和json数据交换的比较

    一.什么是Web Service ? Web Services 是有企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过internet来访问并使用这项在线服务 WebServicc ...

  4. java读取word表格中的数据_JAVA获取word表格中数据的方案

    上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享. 两个方案分别是: ...

  5. 后台静默检测U盘并复制U盘内指定文件到电脑指定目录(U盘助手)

    马上期末考试了,老师复习课讲得PPT是精简版的,老师说了之前上课的PPT可以给但是这个不可以,如果得到期末必过了.本想着把我这个自己花了3个多小时做的U盘助手在教室的电脑上运行着,下课我就可以得到PP ...

  6. 数据挖掘中数据预处理方法_数据挖掘中的数据预处理

    数据挖掘中数据预处理方法 In the previous article, we have discussed the Data Exploration with which we have star ...

  7. 数据预处理常用技巧 | 数据分析中如何处理缺失值?(文末福利)

    无论是数据分析.数据挖掘,还是机器学习,都离不开数据预处理这一重要步骤.没有高质量的数据,就没有高质量的分析结果.而数据不完整,也就是数据中包含缺失值,正是数据分析工作者最常见的问题之一.本文我们就来 ...

  8. python数据预处理的方法_python中常用的九种数据预处理方法

    python中常用的九种预处理方法分享 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardizat ...

  9. python写xml文件 数据量特别大_python中大型xml文件的并行处理

    我有几个正在解析的大型xml文件(提取一些数据子集并写入文件),但是每个文件都有很多文件和大量记录,所以我尝试并行化.在 首先,我有一个生成器从文件中提取记录(这很好):def reader(file ...

最新文章

  1. ConcurrentHashMap源码解析(2)
  2. 【Linux】linux下gzip的压缩/解压缩详解
  3. 【若依(ruoyi)】打开新的选项卡
  4. matlab人工势场法三维演示图,运动规划入门 | 5. 白话人工势场法,从原理到Matlab实现...
  5. Android开发之adb命令安装apk的问题
  6. php做通讯录界面,PHP 制作通讯录(三)
  7. AutoScaling 与函数计算结合,赋予更丰富的弹性能力
  8. ubuntu下如何设置apache的启动和重启
  9. java 牛生小牛_例题:大牛生小牛的问题解决方法
  10. 牛客网---Java题库(1~10)
  11. C++ 作用域与生命周期
  12. 少样本学习系列(四)【元学习与少样本深层理解】
  13. php loadclass,Laravel如何实现自动加载类
  14. 一个专注PR剪辑视频的PR模板网站PRmuban.com
  15. 让程序员崩溃的瞬间(非程序员勿入)
  16. 正大国际期货:为什么外盘期货顺势交易这么难
  17. 拥有数据报表模板,不再愁如何制作数据报表
  18. [go]深入学习Go总结
  19. HP Chromebox G1刷Coreboot Bios
  20. 极限学习机 Extreme Learning Machines 介绍

热门文章

  1. SQL Server 复制表及数据的两种方法
  2. jmeter并发测试报错
  3. Leetcode Best Time to Buy and Sell Stock III
  4. (二十二)岁月无声 - 2
  5. (二十二)岁月无声 - 7
  6. html添加友情链接,新网站应该添加多少个友情链接才合适?
  7. springBoot中tomcat默认端口修改
  8. 微信转发软件后缀_微信拍一拍后缀大全 后缀有意思文字内容分享[多图]
  9. matlab三维凸包,matlab 基本操作总结
  10. 使用idea开发工具maven 缺失依赖