标注工具生成的xml文件转为txt格式

本文介绍了一种将LabelImg生成的XML格式标注文件转换为坐标加标签TXT格式的方法,适用于多数网络训练的需求。通过解析XML文件获取标注框坐标,并将其写入TXT文件中。

上一篇文章介绍学习了标注工具labelImg的安装及详细使用,可以看到其标注成功之后生成的为xml格式文件:
这里写图片描述

但是大多数网络训练的时候需要对其进行格式转换,转为:坐标+标签 的txt格式类型的,所以如下程序用于实现此功能:

import os
import sys
import xml.etree.ElementTree as ET
import glob

def xml_to_txt(indir,outdir):

    os.chdir(indir)
    annotations = os.listdir('.')
    annotations = glob.glob(str(annotations)+'*.xml')

    for i, file in enumerate(annotations):

        file_save = file.split('.')[0]+'.txt'
        file_txt=os.path.join(outdir,file_save)
        f_w = open(file_txt,'w')

        # actual parsing
        in_file = open(file)
        tree=ET.parse(in_file)
        root = tree.getroot()

        for obj in root.iter('object'):
                current = list()
                name = obj.find('name').text

                xmlbox = obj.find('bndbox')
                xn = xmlbox.find('xmin').text
                xx = xmlbox.find('xmax').text
                yn = xmlbox.find('ymin').text
                yx = xmlbox.find('ymax').text
                #print xn
                f_w.write(xn+' '+yn+' '+xx+' '+yx+' ')
                f_w.write(name.encode("utf-8")+'\n')

indir='/home/zgz/data-xml'   #xml目录
outdir='/home/zgz/data-txt'  #txt目录

xml_to_txt(indir,outdir)

转换之后形式如下:
这里写图片描述

注意上面的每一行:4个点表示标注矩形框的上下斜对角线的2个坐标值,及后面的为label;

### XML 文件换为 TXT 文件的代码实现与详解 将 XML 文件换为 TXT 文件的过程可以分为以下几个部分:读取 XML 数据、解析 XML 结构并提取所需信息,最后将这些信息保存到 TXT 文件中。 以下是 Python 中的一个具体实现: #### 1. 使用 `xml.etree.ElementTree` 解析 XML 并将其内容写入 TXT 文件 Python 的标准库提供了强大的工具来处理 XML 文档。下面是一个完整的代码示例,展示如何从 XML 文件中提取数据并将它们存储到 TXT 文件中[^3]。 ```python import xml.etree.ElementTree as ET def parse_xml_to_txt(xml_file, txt_file): # 加载和解析 XML 文件 tree = ET.parse(xml_file) root = tree.getroot() # 打开目标 TXT 文件用于写入 with open(txt_file, 'w', encoding='utf-8') as f: # 遍历 XML 树中的特定节点 (假设我们要提取所有的子节点及其文本) for child in root: tag = child.tag.strip() # 获取标签名 text = child.text.strip() if child.text else "" # 获取文本内容 f.write(f"{tag}: {text}\n") # 将标签和对应的文本写入 TXT 文件 # 调用函数 parse_xml_to_txt('example.xml', 'output.txt') ``` 上述代码的功能解释如下: - **加载 XML 文件**:通过 `ET.parse()` 方法加载整个 XML 文件,并获取根节点。 - **遍历 XML 树结构**:对于每个子节点,提取其标签名称 (`child.tag`) 和对应的内容 (`child.text`)。 - **写入 TXT 文件**:打开一个 TXT 文件,在其中逐行记录每条数据的信息。 #### 2. 处理复杂嵌套结构的情况 如果 XML 文件具有更复杂的嵌套层次,则可以通过递归来深入解析每一个子树。例如: ```python def recursive_parse(element, file_handle): """递归解析 XML 元素""" tag = element.tag.strip() text = element.text.strip() if element.text and not element.text.isspace() else "" file_handle.write(f"{tag}: {text}\n") # 对于当前元素下的所有子元素继续递归调用 for sub_element in element: recursive_parse(sub_element, file_handle) def complex_parse_xml_to_txt(xml_file, txt_file): tree = ET.parse(xml_file) root = tree.getroot() with open(txt_file, 'w', encoding='utf-8') as f: recursive_parse(root, f) complex_parse_xml_to_txt('complex_example.xml', 'complex_output.txt') ``` 此方法适用于多层嵌套的数据结构,能够确保每一级的细节都被捕获并记录下来。 --- ### 注意事项 - 如果 XML 声明指定了编码方式(如 `<<?xml version="1.0" encoding="utf-8"?>`),则在读取文件时应匹配该编码设置以避免乱码问题[^1]。 - 输出至 TXT 文件时也需指定相同的编码格式(通常推荐 UTF-8 编码)以便兼容不同平台上的字符显示需求[^2]。 ---
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值