新闻详情

新闻详情

首页 / 资讯中心 / 详情

python xml Python玩转XML:别再手动抠数据了,这样解析才叫痛快

发布时间:2026/11/11 0:23:33来源:尧图网络
python xml Python玩转XML:别再手动抠数据了,这样解析才叫痛快
做目标检测之际, 我们获取到图片的xml文件, 我们期望借助xml文件解析得出我们所需的信息, 或者我们打算对xml文件进行一些修改, 下面我会利用自带的xml包去完成这一系列的操作, 其实还有一个用于解析HTML的包lxml也能够解读xml文件, 也是相当好用的, 具体的使用方法能够参看这篇博客, 参考网站我置放在底部, 里面讲述得也极为详细, 本文用来演示的xml模板结构状如以下图形:一、读取并解析xml文件我们主要使用的模块是xml.etree.1、解析xml——获取xml树importxml.etree.ElementTree as ET file_xml/home/g4/桌面/project/xxxx/99.xml # xml文件路径 tree ET.parse(file_xml) type(tree)xml.etree.ElementTree.ElementTree这里, tree的对象如是, 从名字能够晓得这个数据结构跟多叉树相类似, 我们借助dir()能够查看这个类的属性以及方法。dir(tree)[__class__,__delattr__,__dict__,__dir__,__doc__,__eq__,__format__,__ge__,__getattribute__,__gt__,__hash__,__init__,__init_subclass__,__le__,__lt__,__module__,__ne__,__new__,__reduce__,__reduce_ex__,__repr__,__setattr__,__sizeof__,__str__,__subclasshook__,__weakref__,_root,_setroot,find,findall,findtext,getiterator,getroot,iter,iterfind,parse,write,write_c14n]在这里, 我们能够看见其中存在find方法, 该方法, 随后将会被讲到, 其使用方式。我们接下来要获取其根节点以及其他节点的内容。2、解析xml——获取子节点及其节点内容得到一棵树之后的我们, 我们借助tree的()方法去获取整颗树的根结点。root tree.getroot() type(root)xml.etree.ElementTree.Elementdir(root)[__class__,__copy__,__deepcopy__,__delattr__,__delitem__,__dir__,__doc__,__eq__,__format__,__ge__,__getattribute__,__getitem__,__getstate__,__gt__,__hash__,__init__,__init_subclass__,__le__,__len__,__lt__,__ne__,__new__,__reduce__,__reduce_ex__,__repr__,__setattr__,__setitem__,__setstate__,__sizeof__,__str__,__subclasshook__,append,attrib,clear,extend,find,findall,findtext,get,getchildren,getiterator,insert,items,iter,iterfind,itertext,keys,makeelement,remove,set,tag,tail,text]我们能够瞧见根结点的数据类型为, 实际上这棵树的全部节点数据类型皆是, 接下来讲述这些方式以及特性。root.find(xxx), 返回的是一个对象, 此对象是在该节点下提取出名为‘xxx’的那个字节点, 若存在多个名为xxx的子节点, 将会返回首个。root.(xxx), 返回值是一个列表, 列表的每个元素是, 即返回该节点下叫做‘xxx’的所有子节点, 用list来储存。root. , 返回该所有的“属性”, 是一个字典, 该节点的“属性”就是, 一会结合示例xml文件, 可看到具体的返回值。返回的是一个字符串, 此字符串是这个根节点所包含的内容, 而这也就是xxxx中的xxxx , 它由root.text标识。随后, 我们依据文章起始部分所给的示例 xml, 去呈现一下上面所介绍的方法以及属性。path root.find(path) # 获取root节点(annotation)下的叫做path的这个节点 type(path)xml.etree.ElementTree.Elementroot.attrib # 获取annotation节点的属性(包含有两个属性一个是name一个是id){name:Panama,id:1234}path.text # 获取path节点的内容百度root.findall(object)[objectat 0x7fd9adcec110, objectat 0x7fd9adcecbf0]能瞧见, 在第一行里, 我们得到了root的字节点path, 这path还是一种类别, 所以呢, 它同样具备前面所提及的那些方法以及属性。能够瞧一瞧最后一行的那个给出来、返回的列表, 其中存有的元素所展示的是节点以内存地址形式存在的情况。之前讲过tree也存在方法 , 实际上要是运用tree的( )所取得的结果同样是这样的。tree.findall(object)[objectat 0x7fd9adcec110, objectat 0x7fd9adcecbf0]我们能够看见, 内存地址同样是这样的, 所以, 借助这两种办法, 去进行搜索, 进而得到的子节点是完全相同的。二、修改xml文件历经过程, 我们已然能够将xml之中的信息予以提取, 紧接着, 我们能够针对获取得到的xml文件里的相关信息实施修改。1、修改节点内容要是想要去修改节点的内容, 我们能够直接采用.text xxxx, 如此这般, 便能够达成修改的操作了。path.text 修改后path root.find(path) path.text修改后上面举的例子表明, path节点的text, 已然从起初的‘百度’转变为了‘修改后’, 而且在再度从root里获取该path节点时, 呈现的同样是修改过后的状况, 因而修改节点内容是极为简便省事的。2、修改节点属性新增节点属性。.set(新属性名新值)root.set(sex,男) root.attrib{name:Panama,id:1234,sex:男}运用使用里的set方法, 来对节点的属性予以修改。该方法为.set, 括号内依次是待修改的属性名, 还有新值。root.set(id,4321) root.attrib{name:Panama,id:4321,sex:男}可以看到root的id这个属性已经被修改成了4321。(删除属性值我还没找到对应的方法。。。。)3、删除和增加子节点如果要在一个下新一个子节点我们采用.()的方式。path root.find(path) path.findall(object)[]obj root.find(object) path.append(obj) path.findall(object)[objectat 0x7fd9adcec110]能瞧见, 于path之下, 原本并无此子节点, 然而在那之后便有了, 需留意的是, 我们唯有身为对象。删除一个子节点采用的是.()的方式。path.remove(obj) path.findall(object)[]也要注意的是参数只能是对象并且还得是同一个内存。obj root.findall(object)[1] path.remove(obj)ValueError: list.remove(x): xnotinlist要是我们所删除的乃是另外一个obj对象呢在此处是会出现报错情况的, 其缘由在于path的那些子节点并非是我们新近创建出的这个obj。三、保存xml文件于我们已然完成修改的xml来讲, 上述进行了属性的更改, 增添了子节点, 移除了字节点, 将操作之后的tree保存为新的xml文件, 采用。importxml.etree.ElementTree as ET file_xml/home/g4/桌面/project/安全帽100/99.xmltree ET.parse(file_xml)#读取treeroot tree.getroot() path root.find(path) obj root.find(object) path.append(obj)#在path子节点下增加一个子节点root.remove(obj)#在root节点下删除一个子节点new_tree ET.ElementTree(root)#root为修改后的rootnew_tree.write(test.xml, encodingutf-8) # 保存为xml文件最主要的保存操作, 是位置处于最后的那两行, 在这里, 因为存在着中文这种情况, 所以传入的参数等于‘utf - 8’这一表述了。看看最后结果。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/10 4:49:37

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/10 19:42:40

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/10 9:14:31

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/10 1:10:29

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/10 15:15:31

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/10 17:14:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉