python代码xml转txt实例


Posted in Python onMarch 10, 2020

为了训练深度学习模型,经常要整理大量的标注数据,需统一不同格式的标注数据,一般情况下习惯读取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实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python解释执行原理分析
Aug 22 Python
python里对list中的整数求平均并排序
Sep 12 Python
python创建和删除目录的方法
Apr 29 Python
Python实现HTTP协议下的文件下载方法总结
Apr 20 Python
Python编程中归并排序算法的实现步骤详解
May 04 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 Python
浅析python中numpy包中的argsort函数的使用
Aug 30 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
Python 实现try重新执行
Dec 21 Python
Tensorflow的梯度异步更新示例
Jan 23 Python
教你怎么用Python监控愉客行车程
Apr 29 Python
Python切割图片成九宫格的示例代码
Mar 10 #Python
pycharm设置python文件模板信息过程图解
Mar 10 #Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
Mar 10 #Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 #Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 #Python
python标准库OS模块详解
Mar 10 #Python
python标准库OS模块函数列表与实例全解
Mar 10 #Python
You might like
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
jQuery中append()方法用法实例
2014/12/25 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
2017/01/18 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
开发Vue树形组件的示例代码
2017/12/21 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
python中self原理实例分析
2015/04/30 Python
python对html代码进行escape编码的方法
2015/05/04 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
python中while和for的区别总结
2019/06/28 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
生产副总岗位职责
2013/11/28 职场文书
职业生涯规划书基本格式
2014/01/06 职场文书
医院实习介绍信
2014/01/12 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
四年级学生评语大全
2014/04/21 职场文书
离婚协议书怎么写
2014/09/12 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
python实现简单倒计时功能
2021/04/21 Python
新手入门Mysql--概念
2021/06/18 MySQL