python循环读取XML文件并统计相应标签的个数

  • Post author:
  • Post category:python


需求:

需要统计图片标注产生的XML文件的每个缺陷个数,同时还要将xml文件中标注错误的缺陷修改过来。

XML文件大致格式:
在这里插入图片描述

每个XML或许有多个缺陷,都要统计出来。

在这里插入图片描述

总共672的XML文件。`

from lxml import etree
import numpy as np 
import pandas as pd 
import os
#封装一个解析XML文件的函数
def readXML(path):
	parser=etree.XMLParser(encoding="utf-8")
	#传入两个参数,一个是文件路径,一个是解析器
	tree=etree.parser(path,parser=parser)
	#查看解析出来的内容
	print(etree.tostring(tree,encoding='utf-8').decode('utf-8')
	#由于xpath返回的是列表,因此需要提取你需要的信息
	name=tree.path("//name/text()")
	#如果xml中有多个name标签,name都会得到,如果只想获得第一个name的值,写成name=tree.path("//name/text()")[0]
	return name

#封装一个循环遍历xml文件名的函数
def findAllFile(base):
	for root ,ds,fs in os.walk(base):
		for f in fs:
			yield f

def main():
	base='你需要遍历的文件夹路径‘
	#用一个数组去存放遍历出来的文件名,方便后续传入readXML函数
	a=[]
	for i in findAllFile(base):
		a.append[i]
		print(a)
		return a
#主函数
if __name__=='__main__':
	a=main()
	n=[]
	#将文件名循环输入到readXML函数解析
	for i in range(len(a)):
		try:
			name=readXML(a[i])
			#由于解析出来name有多个,所以再将name一个一个的取出来在加入数组,如果整个XMl文件name只有一个,那么不需要这步
			for j in range(len(name)):
				n.append(name[j])
		except:
			continue
	#统计数组中相同元素的个数
	a={}
	for i in n:
		if n.count(i)>0:
			a[i]=n.count(i)
	print(a)

运行结果

在这里插入图片描述

在这里插入图片描述



版权声明:本文为qq_38556887原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。