python 标签数量_python实现的批量分析xml标签中各个类别个数功能示例
本文实例讲述了python实现的批量分析xml标签中各个类别个数功能。分享给大家供大家参考,具体如下:
文章目录
需要个脚本分析下各个目标的数目 顺带练习下多进程,自用,直接上代码:
# -*- coding: utf-8 -*-
# @Time : 2019/06/10 18:56
# @Author : TuanZhangSama
import os
import xml.etree.ElementTree as ET
from multiprocessing import Pool,freeze_support,cpu_count
import imghdr
import logging
def get_all_xml_path(xml_dir:str,filter=['.xml']):
#遍历文件夹下所有xml
result=[]
#maindir是当前搜索的目录 subdir是当前目录下的文件夹名 file是目录下文件名
for maindir,subdir,file_name_list in os.walk(xml_dir):
for filename in file_name_list:
ext=os.path.splitext(filename)[1]#返回扩展名
if ext in filter:
result.append(os.path.join(maindir,filename))
return result
def analysis_xml(xml_path:str):
tree=ET.parse(xml_path)
root=tree.getroot()
result_dict={}
for obj in root.findall('object'):
obj_name = obj.find('name').text
obj_num=result_dict.get(obj_name,0)+1
result_dict[obj_name]=obj_num
if imghdr.what(xml_path.replace('.xml','.jpg')) != 'jpeg':
print(xml_path.replace('.xml','.jpg'),'is worng')
# logging.info(xml_path.replace('.xml','.jpg'))
if is_valid_jpg(xml_path.replace('.xml','.jpg')):
pass
return result_dict
def analysis_xmls_batch(xmls_path_list:list):
result_list=[]
for i in xmls_path_list:
result_list.append(analysis_xml(i))
return result_list
def collect_result(result_list:list):
all_result_dict={}
for result_dict in result_list:
for key,values in result_dict.items():
obj_num=all_result_dict.get(key,0)+values
all_result_dict[key]=obj_num
return all_result_dict
def main(xml_dir:str,result_save_path:str =None):
r'''根据xml文件统计所有样本的数目.对于文件不完整的图片和有xml但无图片的样本,直接进行删除.默认跑满所有的cpu核心
Parameters
----------
xml_dir : str
xml所在的文件夹.用的递归形式,因此只需保证xml在此目录的子目录下即可.对应的图片和其xml要在同一目录
result_save_path : str
分析结果的日志保存路径.默认 None 无日志
'''
if result_save_path is not None:
assert isinstance(result_save_path,str),'{} is illegal path'.format(result_save_path)
else:
logging.basicConfig(filename=result_save_path,filemode='w',level=logging.INFO)
freeze_support()#windows 上用
xmls_path=get_all_xml_path(xml_dir)
worker_num=cpu_count()
print('your CPU num is',cpu_count())
length=float(len(xmls_path))/float(worker_num)
#计算下标,尽可能均匀地划分输入文件的列表
indices=[int(round(i*length)) for i in range(worker_num+1)]
#生成每个进程要处理的子文件列表
sublists=[xmls_path[indices[i]:indices[i+1]] for i in range(worker_num)]
pool=Pool(processes=worker_num)
all_process_result_list=[]
for i in range(worker_num):
all_process_result_list.append(pool.apply_async(analysis_xmls_batch,args=(sublists[i],)))
pool.close()
pool.join()
print('analysis done!')
_temp_list=[]
for i in all_process_result_list:
_temp_list=_temp_list+i.get()
result=collect_result(_temp_list)
logging.info(result)
print(result)
def is_valid_jpg(jpg_file):
"""判断JPG文件下载是否完整 """
if not os.path.exists(jpg_file):
print(jpg_file,'is not existes')
os.remove(jpg_file.replace('.jpg','.xml'))
with open(jpg_file, 'rb') as fr:
fr.seek(-2, 2)
if fr.read() == b'\xff\xd9':
return True
else:
os.remove(jpg_file)
os.remove(jpg_file.replace('.jpg','.xml'))
print(jpg_file)
logging.error(jpg_file,'is imperfect img')
return False
if __name__=='__main__':
test_dir='/home/chiebotgpuhq/Share/winshare/origin'
save_path='/home/chiebotgpuhq/MyCode/python/pytorch/mmdetection-master/result.log'
main(test_dir,save_path)
PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
希望本文所述对大家Python程序设计有所帮助。
python 标签数量_python实现的批量分析xml标签中各个类别个数功能示例相关推荐
- python考勤记录_python连接中控考勤机分析数据
用python连接中控考勤机. 下载并分析数据,把结果邮件给人事. SDK包建议用32位的,在win7 64位系统上用64位开发包不行,用32可以. python还要pywin32 注意版本,我这用的 ...
- python爬取网店数据_Python爬虫实现抓取京东店铺信息及下载图片功能示例
本文实例讲述了Python爬虫实现抓取京东店铺信息及下载图片功能.分享给大家供大家参考,具体如下: 这个是抓取信息的 from bs4 import BeautifulSoup import requ ...
- python右键弹出菜单编写_python实现应用程序在右键菜单中添加打开方式功能
最近项目组开发的一个小工具想要在右键菜单中添加打开方式,以有道云笔记为例进行了需求拆解和代码编写 1.需求拆解: 如何实现手动添加右键菜单的打开方式: Step1:打开注册表编辑器,Win+R-> ...
- python翻译器怎么用_Python使用百度翻译开发平台实现英文翻译为中文功能示例
本文实例讲述了Python使用百度翻译开发平台实现英文翻译为中文功能.分享给大家供大家参考,具体如下: #coding=utf8 import random import requests impor ...
- 用 Python selenium爬取股票新闻并存入mysql数据库中带翻页功能demo可下载
用 Python selenium爬取实时股票新闻并存入mysql数据库中 1.分析需求 2.创建表 3.分析需要爬取的网页内容 4.python里面selenium进行爬虫操作 1.添加包 2.连接 ...
- python编写计算器输入1或2代表+或x_Python实现两款计算器功能示例
本文实例为大家分享了Python实现计算器功能示例代码,供大家参考,具体内容如下 1.简单计算器 #计算一个表达式的时候,首先肯定是先算括号里面的,再算乘除法,后算加减法 import re # 1. ...
- python共享内存通信mapofview_python map eval strPython socket模块实现的udp通信功能示例...
本文实例讲述了Python socket模块实现的udp通信功能.分享给大家供大家参考,具体如下: socket介绍 socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要 ...
- python聚类分析如何确定分类个数_确定聚类分析中的类别个数的方法
1.gap statistic 以k-means聚类为例,对于一个聚类个数k,首先利用k-means聚类将样本聚成k类,然后计算k类中各类内各点与类中心的距离加和W(ki),进而计算k类的距离加和W( ...
- python 数组升序_python简单数据清洗和分析
利用python学习了简单一维数组和二维数组,明白了集合.数组.字典大概的关联,并学会从中点用不同的数组类型进行更好的分析. 读取excel文件,开始进行最简单的数据清洗. 将购药时间重新命名为销售时 ...
最新文章
- OpenCV——简易图形画法:画奥运五环
- 求解方程Ax=b的通用程序
- plsql存储过程修改后怎么保存_证件照上传不成功,教你修改分辨率、调整照片大小...
- CSS 编码中超级有用的工具集合
- 第三篇 Entity Framework Plus 之 Query Cache
- .mod.c 是什么文件
- Python问题3——爬虫编码问题
- 终于有人把赌徒谬误讲明白了
- objective-c宏定义
- 太原市初中计算机课程视频,初中全课程教学视频
- scala 判断字段 是不是 日期类型_举个栗子!Tableau 技巧(147):使用 动态参数 筛选到最新日期值...
- uva-10245-分治
- 让解析器可以快速处理词法单元之间的空格
- 机器学习精讲中7.1固定特征核中关于N维向量多项式特征映射的理解(二)
- EAS使用后台事务定时执行方法
- Vue.js 基础入门
- ubuntu18设置屏幕旋转_[Android6.0][MTK6737] 设置屏幕旋转 270 度
- spring-boot只logback日志打印
- smallworld 下的magik module 的logger和service provider
- 来自作业本的写给90后