• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python如何利用lxml对xml进行读写操作教程

python 搞代码 4年前 (2022-01-09) 53次浏览 已收录 0个评论

这篇文章主要为大家详细介绍了python利用lxml读写xml格式的文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

之前在转换数据集格式的时候需要将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")<span>本文来源gaodai#ma#com搞*!代#%^码$网*</span>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类型

以上就是python如何利用lxml对xml进行读写操作教程的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python如何利用lxml对xml进行读写操作教程

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址