txt文件转换为xml文件

工作需要,到处借鉴修改的一个将txt转换成xml的脚本,代码如下:

import os
import xml.etree.ElementTree as ET
import cv2

path = r''    #数据集路径
img_path = os.path.join(path, 'img1')
txt_path = os.path.join(path, 'det')
annotations_path = os.path.join(path, 'Annotations')  # 生成的xml文件的保持路径
if not os.path.exists(annotations_path):
    os.makedirs(annotations_path)


def write_xml(imgname, img_path, filepath, labeldicts, img_shape, T):
    if T == 0:
        root = ET.Element('Annotation')  # 创建Annotation根节点
        ET.SubElement(root, 'folder').text = str(img_path).split('\\')[-2]
        ET.SubElement(root, 'filename').text = str(imgname)  # 创建filename子节点(无后缀)
        ET.SubElement(root, 'path').text = str(img_path)
        sizes = ET.SubElement(root, 'size')  # 创建size子节点
        ET.SubElement(sizes, 'width').text = str(img_shape[0])
        ET.SubElement(sizes, 'height').text = str(img_shape[1])
        ET.SubElement(sizes, 'depth').text = str(img_shape[2])
        for labeldict in labeldicts:
            objects = ET.SubElement(root, 'object')  # 创建object子节点
            ET.SubElement(objects, 'name').text = labeldict['name']  # 文件中的类别名
            ET.SubElement(objects, 'pose').text = 'Unspecified'
            ET.SubElement(objects, 'truncated').text = '0'
            ET.SubElement(objects, 'difficult').text = '0'
            bndbox = ET.SubElement(objects, 'bndbox')
            ET.SubElement(bndbox, 'xmin').text = str(int(labeldict['xmin']))
            ET.SubElement(bndbox, 'ymin').text = str(int(labeldict['ymin']))
            ET.SubElement(bndbox, 'xmax').text = str(int(labeldict['xmax']))
            ET.SubElement(bndbox, 'ymax').text = str(int(labeldict['ymax']))
        tree = ET.ElementTree(root)
        tree.write(filepath, encoding='utf-8')
        print("成功写入", filepath.split('\\')[-1])
    else:
        tree = ET.parse(filepath)
        root = tree.getroot()
        for labeldict in labeldicts:
            objects = ET.SubElement(root, 'object')
            ET.SubElement(objects, 'name').text = labeldict['name']
            ET.SubElement(objects, 'pose').text = 'Unspecified'
            ET.SubElement(objects, 'truncated').text = '0'
            ET.SubElement(objects, 'difficult').text = '0'
            bndbox = ET.SubElement(objects, 'bndbox')
            ET.SubElement(bndbox, 'xmin').text = str(int(labeldict['xmin']))
            ET.SubElement(bndbox, 'ymin').text = str(int(labeldict['ymin']))
            ET.SubElement(bndbox, 'xmax').text = str(int(labeldict['xmax']))
            ET.SubElement(bndbox, 'ymax').text = str(int(labeldict['ymax']))
        tree.write(filepath, encoding='utf-8')


def txt_xml(txt_path, img_path, annotations_path):
    # dict = {'1': "person"}
    files = os.listdir(txt_path)
    pre_img_name = ''
    for i, name in enumerate(files):
        txtFile = open(txt_path + os.sep + name)
        txtList = txtFile.readlines()
        img_name = name.split('.')[0]
        for j in range(len(txtList)):
            labeldicts = []
            img_id = txtList[j].split(',')[0]
            img = cv2.imread(img_path + os.sep + "%06d" % int(img_id) + '.jpg')    #根据图片的命名规则来改
            l = float(txtList[j].split(',')[2])
            t = float(txtList[j].split(',')[3])
            w = float(txtList[j].split(',')[4])
            h = float(txtList[j].split(',')[5])
            x1 = l
            x2 = l + w
            y1 = t
            y2 = t + h
            cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 0, 255), 2)
            new_dict = {'name': 'person',
                        'difficult': '0',
                        'xmin': x1,  # 坐标转换
                        'ymin': y1,
                        'xmax': x2,
                        'ymax': y2
                        }
            labeldicts.append(new_dict)
            if img_id != pre_img_name:
                T = 0
                write_xml(img_name, img_path + os.sep + "%06d" % int(img_id) + '.jpg',
                          annotations_path + os.sep + "%06d" % int(img_id) + '.xml', labeldicts, T)
                pre_img_name = img_id
            else:
                T = 1
                write_xml(img_name, img_path + os.sep + "%06d" % int(img_id) + '.jpg',
                          annotations_path + os.sep + "%06d" % int(img_id) + '.xml', labeldicts, img_shape, T)
                pre_img_name = img_id
    print("共写入{}张xml文件".format(len(os.listdir(annotations_path))))
    # print("共写入%d张xml文件" % len(os.listdir(annotations_path)))


txt_xml(img_path=img_path, txt_path=txt_path, annotations_path=annotations_path)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Pythonxml.etree.ElementTree模块来解析XML文件,并将其转换为文本文件。具体步骤如下: 1. 导入xml.etree.ElementTree模块 ```python import xml.etree.ElementTree as ET ``` 2. 解析XML文件 ```python tree = ET.parse('file.xml') root = tree.getroot() ``` 3. 遍历XML文件的元素,并将其转换为文本格式 ```python with open('file.txt', 'w') as f: for child in root: f.write(child.tag + ': ' + child.text + '\n') ``` 以上代码将XML文件的每个元素的标签和文本内容写入文本文件。你可以根据需要修改代码,以满足你的具体需求。 ### 回答2: Python是一种强大的编程语言,能够方便地进行文件操作和数据转换。对于将XML文件转换TXT文本文件Python提供了多种方法。 一种方法是使用Python自带的xml.etree库。这个库包含了ElementTree类,可以方便地解析和创建XML文档。为了将XML文件转换TXT,可以使用ElementTree类的iter()方法来遍历XML文档的节点。对于每个节点,可以使用text属性或者get("属性名")方法来获取节点的文本内容或属性值,并将它们写入TXT文件。 另一种方法是使用Python的第三方库,如xmltodict和lxml。这些库可以更快速地解析XML文档,并将其转换Python字典或元素对象。对于这些库返回的字典或对象,可以使用Python内置的json库将它们转换为JSON格式的文本,或者直接将它们写入TXT文件。 可以根据自己的需要选择适合自己的方法,以下是使用xml.etree库将XML文件转换TXT的示例代码: ``` import xml.etree.ElementTree as ET # 打开XML文件 tree = ET.parse('example.xml') root = tree.getroot() # 创建TXT文件并打开 with open('example.txt', 'w') as f: # 遍历XML节点 for child in root.iter(): # 获取节点文本 text = child.text.strip() if child.text else '' # 写入TXT文件 f.write(text + '\n') ``` 上述代码,首先使用ET.parse()方法打开XML文件,并使用getroot()方法获取根节点。然后创建TXT文件并打开,使用root.iter()方法遍历XML节点,并使用child.text属性获取节点文本。对于节点不存在文本内容的情况,使用Python的三目运算符来处理。最后将文本内容写入TXT文件。 这样,就可以使用PythonXML文件转换TXT文本文件了。 ### 回答3: 首先,Python是一种开源的、高级的编程语言,拥有丰富的开发库和工具,可以用于多个领域的开发,包括数据处理、机器学习、Web开发等。而XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,常用于Web应用和数据交换。 Python有很多方法可以用来将XML文件转换TXT格式。以下是一些常用的方法: 1. 使用xml.dom模块解析XML文件,然后将解析出的节点信息写入TXT文件。例如: ``` import xml.dom.minidom as dom def xml_to_txt(file_path): with open(file_path, encoding='utf-8') as xml_file: dom_tree = dom.parseString(xml_file.read()) with open("output.txt", 'w', encoding='utf-8') as txt_file: for element in dom_tree.getElementsByTagName("element"): txt_file.write(element.getAttribute("text") + "\n") ``` 2. 使用xml.etree.ElementTree模块解析XML文件,然后将解析出的节点信息写入TXT文件。例如: ``` import xml.etree.ElementTree as ET def xml_to_txt(file_path): tree = ET.parse(file_path) root = tree.getroot() with open("output.txt", 'w', encoding='utf-8') as txt_file: for element in root.findall(".//element"): txt_file.write(element.attrib["text"] + "\n") ``` 3. 使用xmltodict模块将XML格式转换为字典格式,然后将字典信息写入TXT文件。例如: ``` import xmltodict def xml_to_txt(file_path): with open(file_path, encoding='utf-8') as xml_file: xml_dict = xmltodict.parse(xml_file.read()) with open("output.txt", 'w', encoding='utf-8') as txt_file: for element in xml_dict["root"]["elements"]["element"]: txt_file.write(element["@text"] + "\n") ``` 以上是三种常用的将XML文件转换TXT格式的方法,可以根据实际需求选择相应的方法。需要注意的是,如果XML文件非常大,则需要考虑分批处理,以避免内存溢出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值