这篇文章主要为大家详细介绍了python利用lxml读写xml格式的文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
之前在转换数据集格式的时候需要将json转换到xml文件,用lxml包进行操作非常方便。
1. 写xml文件
a) 用etree和objectify
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)
输出的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' # 必须用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. 读xml
这里可以用xpath直接提取所需的元素的值。比如想要获取上面test.xml文件的x, y坐标:
tree = etree.parse("test.xml") # get bbox for bbox in tree.xpath('//bndbox'): # 获取bndbox元素的内容 for corner in bbox.getchildren(): # 便利bndbox元素下的子元素 print corner.text # string类型
以上是Python如何使用lxml来读写xml格式文件的实例分享的详细内容。更多信息请关注PHP中文网其他相关文章!

Python脚本在Unix系统上无法运行的原因包括:1)权限不足,使用chmod xyour_script.py赋予执行权限;2)Shebang行错误或缺失,应使用#!/usr/bin/envpython;3)环境变量设置不当,可打印os.environ调试;4)使用错误的Python版本,可在Shebang行或命令行指定版本;5)依赖问题,使用虚拟环境隔离依赖;6)语法错误,使用python-mpy_compileyour_script.py检测。

使用Python数组比列表更适合处理大量数值数据。1)数组更节省内存,2)数组对数值运算更快,3)数组强制类型一致性,4)数组与C语言数组兼容,但在灵活性和便捷性上不如列表。

列表列表更好的forflexibility andmixDatatatypes,何时出色的Sumerical Computitation sand larged数据集。1)不可使用的列表xbilese xibility xibility xibility xibility xibility xibility xibility xibility xibility xibility xibles and comply offrequent elementChanges.2)

numpymanagesmemoryforlargearraysefefticefticefipedlyuseviews,副本和内存模拟文件.1)viewsAllowSinglicingWithOutCopying,直接modifytheoriginalArray.2)copiesCanbecopy canbecreatedwitheDedwithTheceDwithThecevithThece()methodervingdata.3)metservingdata.3)memore memore-mappingfileShessandAstaStaStstbassbassbassbassbassbassbassbassbassbassbb

Listsinpythondonotrequireimportingamodule,helilearraysfomthearraymoduledoneedanimport.1)列表列表,列表,多功能和canholdMixedDatatatepes.2)arraysaremoremoremoremoremoremoremoremoremoremoremoremoremoremoremoremoremeremeremeremericdatabuteffeftlessdatabutlessdatabutlessfiblesible suriplyElsilesteletselementEltecteSemeTemeSemeSemeSemeTypysemeTypysemeTysemeTypysemeTypepe。

pythonlistscanStoryDatatepe,ArrayModulearRaysStoreOneType,and numpyArraySareSareAraysareSareAraysareSareComputations.1)列出sareversArversAtileButlessMemory-Felide.2)arraymoduleareareMogeMogeNareSaremogeNormogeNoreSoustAta.3)

WhenyouattempttostoreavalueofthewrongdatatypeinaPythonarray,you'llencounteraTypeError.Thisisduetothearraymodule'sstricttypeenforcement,whichrequiresallelementstobeofthesametypeasspecifiedbythetypecode.Forperformancereasons,arraysaremoreefficientthanl

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器