时间:2021-05-22
之前在转换数据集格式的时候需要将json转换到xml文件,用lxml包进行操作非常方便。
1. 写xml文件
a) 用etree和objectify
from lxml import etree, objectifyE = 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' # 必须用stringetree.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 bboxfor 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
今天说的则是使用另外一种扩展库lxml来对网页完成解析。同样的,lxml库能完成对html、xml格式的文件解析,并且能够用来解析大型的文档、解析速度也是相对比
要利用DOM来存取XML文件,你必须将XML文件连结到HTML网页上。#region读写xml文件的2个小函数,200542byhycpublicvoidSet
lxml是Python中与XML及HTML相关功能中最丰富和最容易使用的库。lxml并不是Python自带的包,而是为libxml2和libxslt库的一个Py
lxml是Python中与XML及HTML相关功能中最丰富和最容易使用的库。lxml并不是Python自带的包,而是为libxml2和libxslt库的一个Py
在进行网页抓取的时候,分析定位html节点是获取抓取信息的关键,目前我用的是lxml模块(用来分析XML文档结构的,当然也能分析html结构),利用其lxml.