python利用lxml读写xml格式的文件
时间:2019-03-31
本文章向大家介绍python利用lxml读写xml格式的文件,主要包括python利用lxml读写xml格式的文件使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
之前在转换数据集格式的时候需要将json转换到xml文件,用lxml包进行操作非常方便。
1. 写xml文件
a) 用etree和objectify
from lxml import etree, objectify E = objectify.ElementMaker(annotate=False) anno_tree = E.annotation( E.folder('VOC2014_instance'), E.filename("test.jpg"), E.source( E.database('COCO'), E.annotation('COCO'), E.image('COCO'), E.url("http://test.jpg") ), E.size( E.width(800), E.height(600), E.depth(3) ), E.segmented(0), ) etree.ElementTree(anno_tree).write("text.xml", pretty_print=True)
输出的test.xml文件内容如下:
```
如果需要在anno_tree的基础上加其他标签的话用append即可:
E2 = objectify.ElementMaker(annotate=False) anno_tree2 = E2.object( E.name("person"), E.bndbox( E.xmin(100), E.ymin(200), E.xmax(300), E.ymax(400) ), E.difficult(0) ) anno_tree.append(anno_tree2)
上面的输出就变成了:
<annotation> <folder>VOC2014_instance/person</folder> <filename>test.jpg</filename> <source> <database>COCO</database> <annotation>COCO</annotation> <image>COCO</image> <url>http://test.jpg</url> </source> <size> <width>800</width> <height>600</height> <depth>3</depth> </size> <segmented>0</segmented> <object> <name>person</name> <bndbox> <xmin>100</xmin> <ymin>200</ymin> <xmax>300</xmax> <ymax>400</ymax> </bndbox> <difficult>0</difficult> </object> </annotation>
b) 用etree和SubElement
annotation = etree.Element("annotation") etree.SubElement(annotation, "folder").text = "VOC2014_instance" etree.SubElement(annotation, "filename").text = "test.jpg" source = etree.SubElement(annotation, "source") etree.SubElement(source, "database").text = "COCO" etree.SubElement(source, "annotation").text = "COCO" etree.SubElement(source, "image").text = "COCO" etree.SubElement(source, "url").text = "http://test.jpg" size = etree.SubElement(annotation, "size") etree.SubElement(size, "width").text ='800' # 必须用string etree.SubElement(size, "height").text = '600' etree.SubElement(size, "depth").text = '3' etree.SubElement(annotation, "segmented").text = '0' key_object = etree.SubElement(annotation, "object") etree.SubElement(key_object, "name").text = “person” bndbox = etree.SubElement(key_object, "bndbox") etree.SubElement(bndbox, "xmin").text = str(100) etree.SubElement(bndbox, "ymin").text = str(200) etree.SubElement(bndbox, "xmax").text = str(300) etree.SubElement(bndbox, "ymax").text = str(400) etree.SubElement(key_object, "difficult").text = '0' doc = etree.ElementTree(annotation) doc.write(open("test.xml", "w"), pretty_print=True)
2. 读xml
这里可以用xpath直接提取所需的元素的值。比如想要获取上面test.xml文件的x, y坐标:
tree = etree.parse("test.xml") # get bbox for bbox in tree.xpath('//bndbox'): # 获取bndbox元素的内容 for corner in bbox.getchildren(): # 便利bndbox元素下的子元素 print corner.text # string类型
参考
https://stackoverflow.com/questions/12657043/parse-xml-with-lxml-extract-element-value
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SAP Spartacus的单元测试目录结构
- 突击并发编程JUC系列-并发工具 CyclicBarrier
- 详解 | Linux系统是如何实现存储并读写文件的?
- Angular单元测试的一个错误消息
- Python进行特征提取
- dotnet OpenXML 元素 cNvPr NonVisual Drawing Properties 的属性作用
- Java 对象相关面试题
- 【每日一题】【vue2源码学习】VUE中模版编译原理
- 【每日一题】【vue2源码学习】对VUE响应式数据的理解
- ApacheCN 深度学习译文集 2020.9
- 当Docker遇到Intellij IDEA,再次解放了生产力~
- 基于NPOI的Excel导入导出类库
- 在tinycolinux32上装tinycolinux64 kernel和toolchain
- 通过链下签名授权实现更少 Gas 的 ERC20代币
- 在dbcolinux上安装cozy-light