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’这一表述了。看看最后结果。

相关新闻

PCB差分信号布线实战:从阻抗控制到信号完整性设计

PCB差分信号布线实战:从阻抗控制到信号完整性设计

1. 从“两根线”到“一个信号”:差分信号的本质在硬件工程师的日常里,PCB布线是绕不开的基本功。但一提到“差分信号线”,很多刚入行的朋友就容易犯嘀咕:不就是两根并排走的线吗,为什么规矩这么多?比单端线…

2026/10/17 5:47:12 阅读更多 →
南科大电子科学与技术综合考纲:系统思维与工程能力的培养路径

南科大电子科学与技术综合考纲:系统思维与工程能力的培养路径

1. 一份“非典型”工科考纲的深度拆解 最近在整理资料时,翻到了南方科技大学《电子科学与技术综合》这门课的考试大纲。说实话,第一眼看到这个标题,很多同行或学生可能会觉得,这不就是一份普通的课程考核说明吗?无非是…

2026/10/17 5:47:12 阅读更多 →
Avalonia跨平台UI开发环境配置全攻略:从.NET SDK到项目创建

Avalonia跨平台UI开发环境配置全攻略:从.NET SDK到项目创建

1. 从零开始:为什么选择 Avalonia 作为跨平台 UI 开发起点如果你和我一样,常年混迹在 .NET 技术栈,从 WinForms 到 WPF,一路走来对 XAML 和 MVVM 模式早已烂熟于心。但当需求转向需要一套代码同时跑在 Windows、macOS 和 Linux 上…

2026/10/16 11:06:07 阅读更多 →

最新新闻

SysML语义机制深度解析:Profile重载与系统工程建模本质

SysML语义机制深度解析:Profile重载与系统工程建模本质

简介:本资源是系统工程领域权威入门读物《Systems Engineering with SysML/UML》的完整PDF电子版,面向系统工程师、嵌入式开发人员、MBSE(基于模型的系统工程)实践者及高校相关专业师生,旨在解决复杂系统建模中需求追踪…

2026/10/17 14:45:28 阅读更多 →
C语言手搓迷你DBMS:建表改表与文件持久化实战

C语言手搓迷你DBMS:建表改表与文件持久化实战

简介:这份资源是山东科技大学信息科学与工程学院《数据库系统概论》课程设计的实验报告,面向计算机科学与技术专业学生及需要完成类似数据库课程设计的学习者。报告围绕实现一个简易DBMS展开,核心功能包括CREATE TABLE建表与ALTER TABLE修改表…

2026/10/17 14:45:28 阅读更多 →
人工智能搜索技术实战:从状态空间到A*算法落地

人工智能搜索技术实战:从状态空间到A*算法落地

简介:这份PDF资料面向人工智能初学者与算法进阶学习者,系统梳理搜索技术这一AI问题求解的核心分支。内容从搜索技术概述切入,说明问题求解可抽象为状态空间中的搜索过程,并依次讲解状态空间表示、盲目搜索、启发式搜索、A算法与A*…

2026/10/17 14:45:28 阅读更多 →
2024年CSP-J初赛备考指南:信息学奥赛入门组知识点与真题解析

2024年CSP-J初赛备考指南:信息学奥赛入门组知识点与真题解析

简介:2024年信息学奥赛初中组(CSP-J)初赛真题详细分析文档,面向备战该项赛事的初中生与信息学竞赛教练,提供完整初赛试题和逐题解析。内容按题型编排,系统梳理单项选择题与阅读程序题等核心板块&#xff0c…

2026/10/17 14:45:28 阅读更多 →
数据中心智能化运维落地指南:设备管理、资源调度与告警收敛

数据中心智能化运维落地指南:设备管理、资源调度与告警收敛

简介:围绕数据中心智能化运维与虚拟化数据中心管理,这份技术文档面向运维工程师、IT管理者及数据中心规划人员,旨在解决传统运维方式难以支撑现代数据中心规模与复杂度持续增长的问题。文档依次阐述智能化设备管理、资源调度、任务分配、监控…

2026/10/17 14:45:28 阅读更多 →
Unity场景嵌入Ionic壳工程:基于Cordova桥接的AR集成方案

Unity场景嵌入Ionic壳工程:基于Cordova桥接的AR集成方案

简介:面向需要在 Ionic(Cordova)应用中嵌入 Unity 3D 场景的开发者,这是一份以 Cordova 插件方式打通 Unity 与混合应用双向通信的完整集成指南,覆盖 Android 与 iOS 双端,并已在带 Vuforia 插件的商业级 U…

2026/10/17 14:44:28 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →