之前在转换数据集格式的时候需要将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类型
参考
http://lxml.de/tutorial.html
https://stackoverflow.com/questions/12657043/parse-xml-with-lxml-extract-element-value
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# python
# lxml
# xml
# 一文秒懂python读写csv xml json文件各种骚操作
# 详解 Python 读写XML文件的实例
# python读写xml文件实例详解嘛
# 可以用
# 所需
# 大家多多
# 上加
# 变成了
# size
# http
# width
# source
# COCO
# database
# url
# image
# text
# write
# pretty_print
# filename
# True
# height
# depth
相关文章:
网站设计制作公司地址,网站建设比较好的公司都有哪些?
家庭服务器如何搭建个人网站?
潮流网站制作头像软件下载,适合母子的网名有哪些?
怀化网站制作公司,怀化新生儿上户网上办理流程?
TestNG的testng.xml配置文件怎么写
西安专业网站制作公司有哪些,陕西省建行官方网站?
如何通过.red域名打造高辨识度品牌网站?
建站主机选购指南:核心配置与性价比推荐解析
如何在云主机上快速搭建多站点网站?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
php json中文编码为null的解决办法
如何在香港服务器上快速搭建免备案网站?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
,在苏州找工作,上哪个网站比较好?
黑客如何通过漏洞一步步攻陷网站服务器?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
如何用wdcp快速搭建高效网站?
北京的网站制作公司有哪些,哪个视频网站最好?
如何快速重置建站主机并恢复默认配置?
宝塔Windows建站如何避免显示默认IIS页面?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
如何高效利用亚马逊云主机搭建企业网站?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
建站主机是否属于云主机类型?
建站上市公司网站建设方案与SEO优化服务定制指南
微信h5制作网站有哪些,免费微信H5页面制作工具?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
建站之星如何快速更换网站模板?
临沂网站制作企业,临沂第三中学官方网站?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
建站之星安装后界面空白如何解决?
建站主机SSH密钥生成步骤及常见问题解答?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
宁波免费建站如何选择可靠模板与平台?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在IIS中新建站点并配置端口与IP地址?
设计网站制作公司有哪些,制作网页教程?
高端云建站费用究竟需要多少预算?
如何高效利用200m空间完成建站?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
实例解析Array和String方法
定制建站流程解析:需求评估与SEO优化功能开发指南
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
济南网站制作的价格,历城一职专官方网站?
为什么Go需要go mod文件_Go go mod文件作用说明
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
*请认真填写需求信息,我们会在24小时内与您取得联系。