您好,欢迎访问一九零五行业门户网

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类型
以上就是python如何利用lxml对xml进行读写操作教程的详细内容。
其它类似信息

推荐信息