import openpyxl
import os
import xml.dom.minidom as dom
import xml.parsers.expat as xpe
def get_task_folder(root_path, folder_list=list()):
content_list = os.listdir(root_path)
for content in content_list:
is_dir = os.path.join(root_path, content)
if os.path.isdir(is_dir):
get_task_folder(is_dir, folder_list)
else:
print(root_path)
folder_list.append(root_path)
continue
temp = list(set(folder_list))
temp.sort(key=folder_list.index)
return temp
def get_object_count(task_folder):
tasks = os.listdir(task_folder)
count = 0
for task in tasks:
task_url = os.path.join(task_folder, task)
# 解析xml文件
try:
doc = dom.parse(task_url)
print(task)
# 根节点
annotation = doc.documentElement
objects = annotation.getElementsByTagName("object")
count += len(objects)
except xpe.ExpatError as xe:
print(task + ":" + xe.__repr__())
return count
if __name__ == '__main__':
workbook = openpyxl.Workbook() # 建立一个工作本
sheet = workbook.active # 激活sheet
sheet.title = '统计' # 对sheet进行命名
clo_name = ["分类", "类别", "名称", "框数"]
for col in range(1, 5):
sheet.cell(row=1, column=col).value = clo_name[col - 1]
path = ".\\Annotations"
task_folders = get_task_folder(path)
print(task_folders)
for row, task_folder in enumerate(task_folders):
folder_name = os.path.basename(task_folder)
category = task_folder.split("\\")[-2]
classify = task_folder.split("\\")[-3]
count = get_object_count(task_folder)
sheet.cell(row=row + 2, column=4).value = count
sheet.cell(row=row + 2, column=3).value = folder_name
sheet.cell(row=row + 2, column=2).value = category
sheet.cell(row=row + 2, column=1).value = classify
# 保存
workbook.save(".\\统计.xls")
xml坐标数量统计脚本
最新推荐文章于 2022-04-15 12:35:40 发布