Maison > Article > développement back-end > Tutoriel sur la façon dont python utilise lxml pour lire et écrire du XML
Cet article présente principalement Python pour utiliser lxml pour lire et écrire des fichiers au format XML. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à
avant de convertir le format de l'ensemble de données. dans un fichier XML, et il est très pratique d'utiliser le package lxml.
1. Écrire un fichier XML
a) Tester la sortie à l'aide d'etree et objectiver
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)
Le le contenu du fichier .xml est le suivant :
"
Si vous devez ajouter d'autres balises sur la base d'anno_tree, utilisez simplement 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)
Le résultat ci-dessus devient :
<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) Utilisez etree et 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. Lisez XML
Ici, vous pouvez utiliser XPath pour extraire directement la valeur de l'élément requis. Par exemple, si vous souhaitez obtenir les coordonnées x, y de. le fichier test.xml ci-dessus :
tree = etree.parse("test.xml") # get bbox for bbox in tree.xpath('//bndbox'): # 获取bndbox元素的内容 for corner in bbox.getchildren(): # 便利bndbox元素下的子元素 print corner.text # string类型
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!