全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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类型


参考

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小时内与您取得联系。