Maison > développement back-end > Tutoriel Python > Exemple de partage de la façon dont Python utilise lxml pour lire et écrire des fichiers au format XML

Exemple de partage de la façon dont Python utilise lxml pour lire et écrire des fichiers au format XML

黄舟
Libérer: 2017-08-11 14:08:11
original
1968 Les gens l'ont consulté

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)
Copier après la connexion

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)
Copier après la connexion

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>
Copier après la connexion

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 =&#39;800&#39; # 必须用string
etree.SubElement(size, "height").text = &#39;600&#39;
etree.SubElement(size, "depth").text = &#39;3&#39;
etree.SubElement(annotation, "segmented").text = &#39;0&#39;
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 = &#39;0&#39;
doc = etree.ElementTree(annotation)
doc.write(open("test.xml", "w"), pretty_print=True)
Copier après la connexion

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(&#39;//bndbox&#39;):  # 获取bndbox元素的内容
  for corner in bbox.getchildren(): # 便利bndbox元素下的子元素
    print corner.text  # string类型
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal