本文作者:Rocky0249

公众号:Python空间

写在之前

隔了1天了,不知道你们还记得上一篇文章的内容不,如果不记得的话请移步 -- Python 标准库之 XML(上)。

今天我们继续来学习 XML 的剩下的内容,主要是编辑和一些常用属性和方法的总结,下面开始今天的学习。

编辑(增删改查)

我们还是用上一篇文章中的例子,为了方便查看,我把内容再粘贴过来,下面的内容记得保存并且命名为 test.xml。

<bookstore><book category="COOKING"><title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book><book category="CHILDREN"><title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book><book category="WEB"><title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book></bookstore>

上一篇文章我们主要是对 xml 进行了读取的有关操作,其实还可以对 XML 进行编辑,也就是增删改查的功能,下面我们来操作一下:

>>> import xml.etree.ElementTree as ET>>> tree = ET.ElementTree(file = "test.xml")>>> root = tree.getroot() #获得根>>> root[1].tag'book'>>> del root[1]>>> for ele in root:...     print(ele.tag)...bookbook

如上,我们成功的删除了一个节点,原来有 3 个 book 节点,现在就只剩下两个了。接下来让我们打开源文件看看,是不是正好缺少了第 2 个节点呢?结果让我们很失望,源文件并没有什么变化。

确实如此,源文件并没有变,因为到了这一步的修改动作还只是停留在内存里,还没有将修改的结果输出到文件,不要忘记我们是在内存中建立的 ElementTree 对象。那么该如何做呢?请接着往下看:

>>> import os>>> outpath = os.getcwd()>>> file = outpath + "/test.xml"

把当前文件的路径拼装好。

>>> tree.write(file)

做完上面的操作以后再去看源文件,已经变成两个节点了。

除了删除,也是可以修改的:

>>> for price in root.iter('price'): #原来每本书的价格...     print(price.text)...30.0039.95>>> for price in root.iter('price'): #每本上涨 10 元并做标记...     new_price = float(price.text) + 10...     price.text = str(new_price)...     price.set("updated","up")...>>> tree.write(file)

然后我们来查看一下源文件:

<bookstore><book category="COOKING">  <title lang="en">Everyday Italian</title>   <author>Giada De Laurentiis</author>   <year>2005</year>   <price updated="up">50.0</price> </book><book category="WEB">  <title lang="en">Learning XML</title>   <author>Erik T. Ray</author>   <year>2003</year>   <price updated="up">49.95</price> </book></bookstore>

通过对比我们可以发现,不仅价格改变了,而且在 price 标签里面增加了属性标记。

上面我们是用 del 来删除某个元素,其实这个在编程中我们用的并不多,一般情况下更喜欢用 remove() 方法。比如要删除 price = 50 的书,可以像下面这样操作:

>>> tree.write(file)>>> for book in root.findall("book"):...     price = book.find("price").text...     if float(price) == 50:...             root.remove(book)...>>> tree.write(file)

于是就有了下面的结果:

<bookstore><book category="WEB">  <title lang="en">Learning XML</title>   <author>Erik T. Ray</author>   <year>2003</year>   <price updated="up">49.95</price> </book></bookstore>

接下来我们来看看增加元素:

>>> import xml.etree.ElementTree as ET>>> tree = ET.ElementTree(file = 'test.xml')>>> root = tree.getroot()>>> ET.SubElement(root,"book") # 在root里面添加book节点<Element 'book' at 0x000000000209C778>>>> for ele in root:...     print(ele.tag)...bookbook>>> b2 = root[1]>>> b2.text = 'python'>>> tree.write('test.xml')

这样就大功告成了,然后再像上面一样看一下源文件,发现果真增加了。

常用的属性 & 方法

ET 里面的属性 & 方法很多,这里列出常用的几个,供使用中备查。

1.Element 对象

常用的属性如下:

  • tag:string,元素数据种类

  • text:string,元素的内容

  • attrib:dictionary,元素的属性字典

  • tail:string,元素的尾形

针对属性的操作如下:

  • clear():清空元素的后代,属性,text 和 tail 也设置为 None。

  • items():根据属性字典返回一个列表,列表元素为(key,value)。

  • keys():返回包含所有元素属性键的列表。

  • set(key,value):设置新的属性键和值。

针对后代的操作如下:

  • append(subelement):添加直系子元素。

  • extend(sunelements):增加一串元素对象作为子元素。

  • find(match):寻找第一个匹配子元素,匹配对象可以为 tag 或 path。

  • findall(match):寻找所有匹配子元素,匹配对象可以为 tag 或 path。

  • insert(index,element):在指定位置插入子元素。

  • remove(subelement):删除子元素

2.ElementTree 对象

  • find(match)。

  • findall(match)。

  • getroot():获取根结点。

  • parse(source,parser = None):装载 XML 对象,source 可以为文件名或文件类型对象。

写在之后

Python 标准库之 XML 的基本知识大体我就说这么多,至于明天推送什么我还没想好,有读者在后台说这个能不能弄几个题实战一下,我看看能不能找到什么能练的题,要是找到的话明天就写一下,要是找不到的合适的话就先放一下,以后想几个再更。

不知道大家伙有没有看我昨天的文章,推荐的几个号,确实不错,没看的话可以找着再看看,真的很不错。

如果你觉得本篇文章对你有所帮助的话,点个赞再走呀,谢谢。

The end。

推荐阅读:

一文彻底搞懂 Python 生成器!

一文彻底搞懂 Python 装饰器!

加我微信获取 10 本 Python 经典书籍

Python 标准库之 XML(下)相关推荐

  1. Python 标准库之 xml.etree.ElementTree xml解析

    Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...

  2. 干货 | Python 标准库之 XML(上)

    本文作者:Rocky0249 公众号:Python空间 写在之前 带分隔符的文件仅有两维的数据:行 & 列.如果我们想在程序之间交换数据结构,需要一种方法把层次结构,序列,集合和其它的数据结构 ...

  3. Python标准库之xml.etree.ElementTree

    1     2        3         4 创建元素的方法有Element或者SubElement(),前者称作元素的构建函数(constructor),用以构建任一独存的元素: 后者称作元 ...

  4. python xml et_Python 标准库之 XML(下)

    本文字数:3253 字 阅读本文大概需要:9 分钟 写在之前 隔了两天了,不知道你们还记得上一篇文章的内容不,如果不记得的话请移步 -- Python 标准库之 XML(上). 今天我们继续来学习 X ...

  5. python 标准库之 glob 介绍(获取文件夹下所有同类文件)

    python标准库之glob介绍 glob 文件名模式匹配,不用遍历整个目录判断每个文件是不是符合. 1.通配符 星号(*)匹配零个或多个字符 import glob for name in glob ...

  6. 转Python 标准库 urllib2 的使用细节

    Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库.这里总结了一些 urllib2 库的使用细节. 1 P ...

  7. 列出5个python标准库_Python常用标准库使用(一)

    自学python一段时间,之前总是学习基本语法,对Python标准库没怎么接触,所以计划从常用的标准库开始,大体了解一遍,下面是学习过程中的笔记. 一.OS模块 主要对目录.或者文件操作.常用方法如下 ...

  8. Python 标准库 urllib2 的使用细节

    刚好用到,这篇文章写得不错,转过来收藏.    转载自 道可道 | Python 标准库 urllib2 的使用细节 Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节 ...

  9. python标准库怎么用_Python常用标准库使用(一)

    自学python一段时间,之前总是学习基本语法,对Python标准库没怎么接触,所以计划从常用的标准库开始,大体了解一遍,下面是学习过程中的笔记. 一.OS模块 主要对目录.或者文件操作.常用方法如下 ...

最新文章

  1. 数据库-ADONET-向数据库提交更新
  2. [linux]unixODBC的安装配置说明
  3. Java 变量、数据类型
  4. FPGA资源平民化的新晋- F3 技术解析
  5. java判断输入月份_Java输入年份和月份判断多少天实例代码
  6. mvc ajax控制器无反应,关于ASP.NET MVC 3:无法通过AJAX将数据传递到控制器
  7. VB案例:泸职院教师评学评价表计算程序
  8. 江淮汽车涉嫌排放造假 罚款1.7亿
  9. HDOJ水题集合4:杂题
  10. 3.SRE:Google运维解密 --- 拥抱风险
  11. UE4 植被工具的使用
  12. 计算机二级vf上机考试题库,计算机等级考试二级VF上机题库
  13. eclipse 注销快捷键
  14. CPU的内部架构和工作原理(转)
  15. PHP 手机验证码登录
  16. 哈工大计算机网络-作业讲解
  17. SCI、EI、IEEE和中文期刊在查询中有什么区别?
  18. 炫酷登录注册界面【超级简单 jQuery+JS+HTML+CSS实现】
  19. 孪生素数的最优解(应该)
  20. 卡巴斯基网络版6.0安装回顾

热门文章

  1. PHP-fpm的master进程杀死work还能处理任务吗
  2. linux c ide ssh,VSCode配置远程SSH-IDE
  3. 计算机网络一种开源,第一公里以太网
  4. oracle cube排序,Oracle命令CUBE
  5. html缓存在本地缓存,HTML5 本地缓存 window.localStorage
  6. 过拟合解决方法python_《python深度学习》笔记---4.4、过拟合与欠拟合(解决过拟合常见方法)...
  7. java match正则不生效_[Java教程]正则表达式match()函数
  8. 如何删除写保护的文件_如何找回已删除或永久删除的Office Excel文件
  9. java2第九章的总结_java并发的艺术-读书笔记-第九章线程池
  10. java MD5加密