python实现的批量分析xml标签中各个类别个数功能示例

python实现的批量分析xml标签中各个类别个数功能示例,第1张

概述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,fre

本文实例讲述了python实现的批量分析xml标签中各个类别个数功能。分享给大家供大家参考,具体如下:

文章目录

需要个脚本分析下各个目标的数目 顺带练习下多进程,自用,直接上代码:

# -*- Coding: utf-8 -*-# @Time  : 2019/06/10 18:56# @Author : TuanZhangSamaimport osimport xml.etree.ElementTree as ETfrom multiprocessing import Pool,freeze_support,cpu_countimport imghdrimport loggingdef 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 resultdef 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_dictdef analysis_xmls_batch(xmls_path_List:List):  result_List=[]  for i in xmls_path_List:    result_List.append(analysis_xml(i))  return result_Listdef 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_dictdef 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 Falseif __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 *** 作的在线工具供大家参考使用:

在线XML/JsON互相转换工具:
http://tools.jb51.net/code/xmlJson

在线格式化XML/在线压缩XML:
http://tools.jb51.net/code/xmlformat

XML在线压缩/格式化工具:
http://tools.jb51.net/code/xml_format_compress

XML代码在线格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python *** 作xml数据技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串 *** 作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录 *** 作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

总结

以上是内存溢出为你收集整理的python实现的批量分析xml标签中各个类别个数功能示例全部内容,希望文章能够帮你解决python实现的批量分析xml标签中各个类别个数功能示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1199422.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存