Heim  >  Artikel  >  Backend-Entwicklung  >  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

巴扎黑
巴扎黑Original
2017-08-12 14:34:242327Durchsuche

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)

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)

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>

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)

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类型

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!

Stellungnahme:
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