国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python利用lxml讀寫xml格式的文件

2019-11-25 15:56:48
字體:
來源:轉載
供稿:網友

之前在轉換數據集格式的時候需要將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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永兴县| 新蔡县| 香港 | 宜宾市| 叶城县| 乌拉特后旗| 佳木斯市| 和政县| 阜宁县| 凌云县| 武鸣县| 遵化市| 松原市| 普陀区| 南充市| 合阳县| 山东省| 临泽县| 偃师市| 广平县| 绵竹市| 青州市| 凌云县| 贵南县| 和林格尔县| 海原县| 鄱阳县| 玉门市| 手机| 呼和浩特市| 周宁县| 土默特左旗| 额尔古纳市| 郴州市| 潮安县| 北宁市| 淮南市| 柘城县| 仁寿县| 溆浦县| 汝城县|