python代码xml转txt实例

为了训练深度学习模型,经常要整理大量的标注数据,需统一不同格式的标注数据,一般情况下习惯读取TXT格式的数据。但实际中经常遇到XML格式的标注数据,在此举例:1.读取XML标注数据;2.写入TXT文件。

XML标注数据如下

<annotation verified="no">
 <folder>suE</folder>
 <filename>Drivingrecord_001</filename>
 <path>C:\Desktop\Drivingrecord_001.jpg</path>
 <source>
  <database>Unknown</database>
 </source>
 <size>
  <width>1920</width>
  <height>1080</height>
  <depth>3</depth>
 </size>
 <segmented>0</segmented>
 <object>
  <name>苏E*****-蓝-1-白,灰-大众-上海大众-桑塔纳-尚纳</name>
  <flag>polygon</flag>
  <pose>Unspecified</pose>
  <truncated>0</truncated>
  <difficult>0</difficult>
  <bndbox>
   <leftTopx>170</leftTopx>
   <leftTopy>704</leftTopy>
   <rightTopx>167</rightTopx>
   <rightTopy>729</rightTopy>
   <rightBottomx>242</rightBottomx>
   <rightBottomy>735</rightBottomy>
   <leftBottomx>243</leftBottomx>
   <leftBottomy>710</leftBottomy>
  </bndbox>
 </object>
 <object>
  <name>苏E*****-蓝-1-黄-雷克萨斯-雷克萨斯(进口)-雷克萨斯RX</name>
  <flag>polygon</flag>
  <pose>Unspecified</pose>
  <truncated>0</truncated>
  <difficult>0</difficult>
  <bndbox>
   <leftTopx>733</leftTopx>
   <leftTopy>721</leftTopy>
   <rightTopx>733</rightTopx>
   <rightTopy>759</rightTopy>
   <rightBottomx>881</rightBottomx>
   <rightBottomy>760</rightBottomy>
   <leftBottomx>882</leftBottomx>
   <leftBottomy>722</leftBottomy>
  </bndbox>
 </object>
 <object>
  <name>苏*****-蓝-1-黑-宝马-宝马(进口)-宝马7系</name>
  <flag>polygon</flag>
  <pose>Unspecified</pose>
  <truncated>0</truncated>
  <difficult>0</difficult>
  <bndbox>
   <leftTopx>1274</leftTopx> 
 <leftTopy>657</leftTopy>
   <rightTopx>1274</rightTopx>
   <rightTopy>671</rightTopy>
   <rightBottomx>1325</rightBottomx>
   <rightBottomy>670</rightBottomy>
   <leftBottomx>1326</leftBottomx>
   <leftBottomy>656</leftBottomy>
  </bndbox>
 </object>
 <object>
  <name>苏*****-蓝-1-灰-标致-东风标致-标致307</name>
  <flag>polygon</flag>
  <pose>Unspecified</pose>
  <truncated>0</truncated>
  <difficult>0</difficult>
  <bndbox>
   <leftTopx>1609</leftTopx>
   <leftTopy>658</leftTopy>
   <rightTopx>1611</rightTopx>
   <rightTopy>671</rightTopy>
   <rightBottomx>1659</rightBottomx>
   <rightBottomy>669</rightBottomy>
   <leftBottomx>1657</leftBottomx>
   <leftBottomy>656</leftBottomy>
  </bndbox>
 </object>
</annotation> 

在此,我们只需要图片名filename,和每个object的坐标(四个点的坐标)

Drivingrecord_001.jpg 170 704 167 729 242 735 243 710 733 721 733 759 881 760 882 722 1274 657 1274 671 1325 670 1326 656 1609 658 1611 671 1659 669 1657 656

利用xml.dom.*模块,文件对象模块DOM在读取XML文件时,一次读取整个文件,将其所有数据保存在一个树结构中,此时,可利用DOM的各种函数来读取目标数据。在此,利用xml.dom.minidom解析XML文件。

并将目标数据写入TXT文档。

# -*- coding: utf-8 -*-
"""
Created on Fri Mar 2 15:36:44 2018 

@author: gg
""" 

import xml.dom.minidom
import os 

save_dir = 'D:\plate_train'
if not os.path.exists(save_dir):
  os.mkdir(save_dir)
f = open(os.path.join(save_dir, 'landmark.txt'), 'w') 

DOMTree = xml.dom.minidom.parse('D:\plate_train\label\Drivingrecord_001.xml')
annotation = DOMTree.documentElement 

filename = annotation.getElementsByTagName("filename")[0]
imgname = filename.childNodes[0].data+'.jpg'
print(imgname) 

objects = annotation.getElementsByTagName("object") 

loc = [imgname] #文档保存格式:文件名 坐标 

for object in objects:
  bbox = object.getElementsByTagName("bndbox")[0]
  leftTopx = bbox.getElementsByTagName("leftTopx")[0]
  lefttopx = leftTopx.childNodes[0].data
  print(lefttopx)
  leftTopy = bbox.getElementsByTagName("leftTopy")[0]
  lefttopy = leftTopy.childNodes[0].data
  print(lefttopy)
  rightTopx = bbox.getElementsByTagName("rightTopx")[0]
  righttopx = rightTopx.childNodes[0].data
  print(righttopx)
  rightTopy = bbox.getElementsByTagName("rightTopy")[0]
  righttopy = rightTopy.childNodes[0].data
  print(righttopy)
  rightBottomx = bbox.getElementsByTagName("rightBottomx")[0]
  rightbottomx = rightBottomx.childNodes[0].data
  print(rightbottomx)
  rightBottomy = bbox.getElementsByTagName("rightBottomy")[0]
  rightbottomy = rightBottomy.childNodes[0].data
  print(rightbottomy)
  leftBottomx = bbox.getElementsByTagName("leftBottomx")[0]
  leftbottomx = leftBottomx.childNodes[0].data
  print(leftbottomx)
  leftBottomy = bbox.getElementsByTagName("leftBottomy")[0]
  leftbottomy = leftBottomy.childNodes[0].data
  print(leftbottomy) 

  loc = loc + [lefttopx, lefttopy, righttopx, righttopy, rightbottomx, rightbottomy, leftbottomx, leftbottomy] 

for i in range(len(loc)):
  f.write(str(loc[i])+' ')
f.write('\t\n')
f.close()
   

以上这篇python代码xml转txt实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python解析xml文件方式(解析、更新、写入)

    Overview 这篇博客内容将包括对XML文件的解析.追加新元素后写入到XML,以及更新原XML文件中某结点的值.使用的是python的xml.dom.minidom包,详情可见其官方文档:xml.dom.minidom官方文档.全文都将围绕以下的customer.xml进行操作: <?xml version="1.0" encoding="utf-8" ?> <!-- This is list of customers --> <c

  • Python读写txt文本文件的操作方法全解析

    一.文件的打开和创建 >>> f = open('/tmp/test.txt') >>> f.read() 'hello python!\nhello world!\n' >>> f <open file '/tmp/test.txt', mode 'r' at 0x7fb2255efc00> 二.文件的读取 步骤:打开 -- 读取 -- 关闭 >>> f = open('/tmp/test.txt') >>&

  • Python实现的读取/更改/写入xml文件操作示例

    本文实例讲述了Python实现的读取/更改/写入xml文件操作.分享给大家供大家参考,具体如下: 原始文档内容(test.xml): <?xml version="1.0" encoding="UTF-8"?> <framework> <processers> <processer name="AProcesser" file="lib64/A.so" path="/tmp&

  • python代码xml转txt实例

    为了训练深度学习模型,经常要整理大量的标注数据,需统一不同格式的标注数据,一般情况下习惯读取TXT格式的数据.但实际中经常遇到XML格式的标注数据,在此举例:1.读取XML标注数据:2.写入TXT文件. XML标注数据如下 <annotation verified="no"> <folder>suE</folder> <filename>Drivingrecord_001</filename> <path>C:\D

  • 详解 Python 读写XML文件的实例

    详解 Python 读写XML文件的实例 Python 生成XML文件 from xml.dom import minidom # 生成XML文件方式 def generateXml(): impl = minidom.getDOMImplementation() # 创建一个xml dom # 三个参数分别对应为 :namespaceURI, qualifiedName, doctype doc = impl.createDocument(None, None, None) # 创建根元素 r

  • 使用Python生成XML的方法实例

    本文实例讲述了使用Python生成XML的方法.分享给大家供大家参考,具体如下: 1. bookstore.py #encoding:utf-8 ''' 根据一个给定的XML Schema,使用DOM树的形式从空白文件生成一个XML. ''' from xml.dom.minidom import Document doc = Document() #创建DOM文档对象 bookstore = doc.createElement('bookstore') #创建根元素 bookstore.set

  • python解析xml文件操作实例

    本文实例讲述了python解析xml文件操作的实现方法.分享给大家供大家参考.具体方法如下: xml文件内容如下: <?xml version="1.0" ?> <!--Simple xml document__chapter 8--> <book> <title> sample xml thing </title> <author> <name> <first> ma </first

  • 重构Python代码的六个实例

    前言 对自己写的冗长代码,想重构但又无思路?小编整理了介绍python代码重构优化的一些方法,助你一臂之力. 编写干净的 Pythonic 代码就是尽可能使其易于理解,但又简洁.所以重构代码让代码简洁易理解是很有必要的. 本文重点是想跟大家探讨为什么这些重构是好想法,而不仅仅是如何做. 1. 合并嵌套的 if 条件 太多的嵌套会使代码难以理解,这在 Python 中尤为如此,因为 Python 没有括号来帮助区隔不同的嵌套级别. 阅读深度嵌套的代码容易让人烦躁,因为你必须理清哪些条件属于哪一级.

  • python 解析XML python模块xml.dom解析xml实例代码

    一 .python模块 xml.dom 解析XML的APIminidom.parse(filename)加载读取XML文件 doc.documentElement获取XML文档对象 node.getAttribute(AttributeName)获取XML节点属性值 node.getElementsByTagName(TagName)获取XML节点对象集合 node.childNodes #返回子节点列表. node.childNodes[index].nodeValue获取XML节点值 nod

  • python 通过xml获取测试节点和属性的实例

    写在前面:通过xml获取测试数据,主要是为了使数据参数化.测试脚本和测试数据分离,使得脚本清晰容易维护,方便排查问题. XML:可扩展的标记语言,是一种用于标记电子文件使其具有结构行的标记语言. 自动化测试中的使用场景: 1. 经常变动的测试数据: 2. 数据量大,不方便放在脚本中: 3. 数据作用于多个地方: 4. 相同测试用例,可以使用不同的数据: 5. 例:不稳定,后续改动较多功能:容易出错的功能 XML特征 • 具有自我描述性,本身不做任何事情 • 声明部分 <?xml version=

  • 使用tqdm显示Python代码执行进度功能

    在使用Python执行一些比较耗时的操作时,为了方便观察进度,通常使用进度条的方式来可视化呈现.Python中的tqdm就是用来实现此功能的. 先来看看tqdm的进度条效果: tqdm的基本用法 tqdm最主要的用法有3种,自动控制.手动控制或者用于脚本或命令行. 自动控制运行 最基本的用法,将tqdm()直接包装在任意迭代器上. from tqdm import tqdm import time text = "" for char in tqdm(["a", &

  • Python实现xml格式转txt格式的示例代码

    目录 1.前言 2.分析xml.txt数据 3.转换过程 4.最后结果对比 1.前言 最近学习Yolo v5是遇见了个问题,找的数据集全是xml文件,VOC 的标注是 xml 格式的,而YOLO是.txt格式,那么问题就来了,手动提取肯定是不可能的,那只能借用程序解决咯. 2.分析xml.txt数据 这是xml树形结构 这是txt格式 总结: 1.提取object->name.bndbox->xmin,ymin,xmax,ymin 2.格式转化需要用公式转换 YOLO数据集txt格式: x_c

  • Python存取XML的常见方法实例分析

    本文实例讲述了Python存取XML的常见方法.分享给大家供大家参考,具体如下: 目前而言,Python 3.2存取XML有以下四种方法: 1.Expat 2.DOM 3.SAX 4.ElementTree 以以下xml作为讨论依据 <?xml version="1.0" encoding="utf-8"?> <Schools> <School Name="XiDian"> <Class Id="

随机推荐