Heim > Backend-Entwicklung > Python-Tutorial > Tutorial darüber, wie Python lxml zum Lesen und Schreiben von XML verwendet

Tutorial darüber, wie Python lxml zum Lesen und Schreiben von XML verwendet

巴扎黑
Freigeben: 2017-08-12 14:34:24
Original
2442 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die Verwendung von lxml zum Lesen und Schreiben von Dateien im XML-Format vorgestellt. Interessierte Freunde können sich vor der Konvertierung des Datensatzformats auf

beziehen in eine XML-Datei, und es ist sehr praktisch, das lxml-Paket zu verwenden.

1. XML-Datei schreiben

a) Ausgabe mit etree testen und objektivieren


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)
Nach dem Login kopieren

Die Der Inhalt der .xml-Datei lautet wie folgt:

"

Wenn Sie weitere Tags auf Basis von anno_tree hinzufügen müssen, verwenden Sie einfach 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)
Nach dem Login kopieren

Die obige Ausgabe wird:


<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>
Nach dem Login kopieren

b) Verwenden Sie etree und 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)
Nach dem Login kopieren

2. XML lesen

Hier können Sie xpath verwenden, um den Wert des erforderlichen Elements direkt zu extrahieren die test.xml-Datei oben:


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类型
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonTutorial darüber, wie Python lxml zum Lesen und Schreiben von XML verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage