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操作CouchDB的方法
Oct 08 Python
浅谈对yield的初步理解
May 29 Python
python merge、concat合并数据集的实例讲解
Apr 12 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
详解Django定时任务模块设计与实践
Jul 24 Python
Python MySQLdb 执行sql语句时的参数传递方式
Mar 04 Python
如何基于windows实现python定时爬虫
May 01 Python
django模板获取list中指定索引的值方式
May 14 Python
Python dict的常用方法示例代码
Jun 23 Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 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函数解决SQL injection
2006/12/09 PHP
使用PHP批量生成随机用户名
2008/07/10 PHP
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
php解析json数据实例
2014/08/19 PHP
php自定义apk安装包实例
2014/10/20 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
2016/03/07 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
html组件不可输入(只读)同时任何组件都有效
2013/04/01 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
深入理解Python分布式爬虫原理
2017/11/23 Python
Python中常用信号signal类型实例
2018/01/25 Python
python程序封装为win32服务的方法
2021/03/07 Python
django做form表单的数据验证过程详解
2019/07/26 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
平面设计的岗位职责
2013/11/08 职场文书
水果连锁超市创业计划书
2014/01/24 职场文书
员工手册董事长致辞
2015/07/29 职场文书
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python