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/8/7 9:23:13 阅读更多 →
南科大电子科学与技术综合考纲:系统思维与工程能力的培养路径

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

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

2026/8/8 15:01:52 阅读更多 →
Avalonia跨平台UI开发环境配置全攻略:从.NET SDK到项目创建

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

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

2026/8/7 9:22:13 阅读更多 →

最新新闻

国内最专业的GEO优化公司是哪家?2026权威评测与选型指南

国内最专业的GEO优化公司是哪家?2026权威评测与选型指南

在人工智能技术快速普及的当下,AI生成式搜索已成为用户获取信息、对比产品、认知品牌的核心渠道,彻底改变了传统互联网流量分发逻辑。GEO(生成式引擎优化)是适配AI大模型检索、引用、推荐机制的新型数字化优化技术,区别…

2026/8/8 15:01:49 阅读更多 →
JSON翻译神器:5分钟掌握免费多语言文件转换完整指南

JSON翻译神器:5分钟掌握免费多语言文件转换完整指南

JSON翻译神器:5分钟掌握免费多语言文件转换完整指南 【免费下载链接】json-translator jsontt 💡 - AI JSON Translator with GPT / Gemma / Mixtral / llama other FREE translation modules to translate your json/yaml files into other languages …

2026/8/8 15:01:49 阅读更多 →
国内GEO公司排名前十的有哪些?2026服务商深度盘点与选型参考

国内GEO公司排名前十的有哪些?2026服务商深度盘点与选型参考

随着人工智能技术快速迭代,大模型应用全面落地,互联网流量分发逻辑发生迭代。以大模型问答、智能生成为核心的AI搜索场景,逐步成为用户获取信息、决策消费的重要渠道,GEO生成式引擎优化也随之成为数字营销领域的重要研究方向。目前…

2026/8/8 15:01:49 阅读更多 →
雀魂麻将数据分析工具:用开源方案突破技术瓶颈的完整指南

雀魂麻将数据分析工具:用开源方案突破技术瓶颈的完整指南

雀魂麻将数据分析工具:用开源方案突破技术瓶颈的完整指南 【免费下载链接】amae-koromo 雀魂牌谱屋 (See also: https://github.com/SAPikachu/amae-koromo-scripts ) 项目地址: https://gitcode.com/gh_mirrors/am/amae-koromo 还在为雀魂麻将的段位停滞不前…

2026/8/8 15:01:49 阅读更多 →
阿里巴巴Java编码规范P3C:从新手到专家的完整指南

阿里巴巴Java编码规范P3C:从新手到专家的完整指南

阿里巴巴Java编码规范P3C:从新手到专家的完整指南 【免费下载链接】p3c Alibaba Java Coding Guidelines pmd implements and IDE plugin 项目地址: https://gitcode.com/gh_mirrors/p3/p3c 你是否曾为团队代码风格不统一而烦恼?是否在代码评审中…

2026/8/8 15:01:49 阅读更多 →
从Prompt到Harness:构建稳定可控的AI应用系统工程指南

从Prompt到Harness:构建稳定可控的AI应用系统工程指南

1. 项目概述:从“灵光一现”到“稳定产出”的鸿沟如果你最近尝试过和ChatGPT、Claude或者国内的文心一言、通义千问这类大模型对话,大概率经历过这样的场景:你精心构思了一个问题,满怀期待地发送出去,结果AI要么答非所…

2026/8/8 15:00:49 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →