You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python遍历XML文件并修改PASCALVOC标注的指定字段值

PASCAL VOC标注坐标批量放大实现方案

核心思路

使用Python标准库xml.etree.ElementTree遍历解析所有XML标注文件,定位bndbox节点下的坐标字段,完成数值放大后回写文件即可。

前置准备

操作前请先完整备份所有原始XML标注文件,避免修改错误导致数据丢失。

完整实现代码

import os
import xml.etree.ElementTree as ET

# 配置项,按需修改
XML_FOLDER = "./Annotations"  # 替换为你的XML文件存放目录
SCALE_RATIO = 10  # 数值放大倍数
TARGET_FIELDS = ["xmin", "ymin", "xmax", "ymax"]  # 需要修改的字段

# 遍历目录下所有XML文件
for file_name in os.listdir(XML_FOLDER):
    if not file_name.lower().endswith(".xml"):
        continue
    file_path = os.path.join(XML_FOLDER, file_name)
    
    # 解析XML文件
    tree = ET.parse(file_path)
    root = tree.getroot()
    
    # 遍历所有bndbox节点(支持单文件多目标标注场景)
    for bndbox in root.iter("bndbox"):
        for field in TARGET_FIELDS:
            field_node = bndbox.find(field)
            if field_node is not None and field_node.text.strip():
                # 读取原始数值,放大后重新赋值
                original_val = int(field_node.text.strip())
                field_node.text = str(original_val * SCALE_RATIO)
    
    # 保持XML缩进格式(Python 3.9及以上版本支持,低版本可注释该行)
    ET.indent(root, space="\t", level=0)
    
    # 回写修改后的XML文件
    tree.write(file_path, encoding="utf-8", xml_declaration=True)

注意事项

  • 如果你的标注坐标为浮点数,将代码中的int替换为float即可
  • 如果图像分辨率也同步放大了10倍,可新增代码修改size节点下的width、height字段,逻辑和修改坐标一致
  • Python 3.9以下版本没有ET.indent()方法,注释该行即可,只是回写的XML没有格式化缩进,不影响正常读取使用

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 18:06:01