本文字数:3253 字

阅读本文大概需要:9 分钟

写在之前

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

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

编辑(增删改查)

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

Everyday ItalianGiada De Laurentiis200530.00Harry PotterJ K. Rowling200529.99Learning XMLErik T. Ray200339.95

上一篇文章我们主要是对 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)

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

Everyday ItalianGiada De Laurentiis200550.0Learning XMLErik T. Ray200349.95

通过对比我们可以发现,不仅价格改变了,而且在 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)

于是就有了下面的结果:

Learning XMLErik T. Ray200349.95

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

>>> import xml.etree.ElementTree as ET>>> tree = ET.ElementTree(file = 'test.xml')>>> root = tree.getroot()>>> ET.SubElement(root,"book") # 在root里面添加book节点>>> 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 xml et_Python 标准库之 XML(下)相关推荐

  1. Python 标准库之 XML(下)

    本文作者:Rocky0249 公众号:Python空间 写在之前 隔了1天了,不知道你们还记得上一篇文章的内容不,如果不记得的话请移步 -- Python 标准库之 XML(上). 今天我们继续来学习 ...

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

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

  3. python语言的标准库有哪些,python标准库函数有哪些

    PyFlux库函数是什么? PyFlux是Python编程语言的开源时间序列库.PyFlux是Python中为处理时间序列问题而创建的开源库. 该库有一系列极好的时间序列模型,包括但不限于 ARIMA ...

  4. python基础_026__标准库和第三方库

    一.标准库与第三方库 1.标准库与第三方库的区别,标准库是python自带的,可以直接import导入, 第三方库需要pip安装/pycharm中下载 之后使用 2. 以下是,python自带标准库里 ...

  5. 笔记——Python常用的标准库

    Python 语言通过模块(module)来组织代码.Python 标准库十分庞大,由C语言编写的内置模块,和由 Python 编写的解决常见开发需求的模块.下面的Python是一些标准库. 库名 作 ...

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

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

  7. vb查询xml中特定节点下的标签_Python 标准库之XML

    写在之前 带分隔符的文件仅有两维的数据:行 & 列.如果我们想在程序之间交换数据结构,需要一种方法把层次结构,序列,集合和其它的数据结构编码成文本. 今天要说的 XML 是最突出的处理上述这种 ...

  8. python etree库_python 标准库之xml.etree.ElementTree

    简介 Element类型是一种灵活的容器对象,用于在内存中存储结构化数据. [注意]xml.etree.ElementTree模块在应对恶意结构数据时显得并不安全. 每个element对象都具有以下属 ...

  9. Python 基础 - Day 5 Learning Note - 模块 之 标准库:xml (9)

    xml 模块介绍 和json一样,适用于不同语言及程序的数据交换的协议.但是json用起来更简单,并有代替xml的趋势. 现在多数金融数据提供方(e.g. bloombegy)还在用xml的方式. 在 ...

最新文章

  1. java文件流读取异常_Java IO流的FileInputStream读取文件的问题,不同写法输出不一样...
  2. 8086实时时钟实验(一)——《x86汇编语言:从实模式到保护模式》05
  3. 使用snmp4j实现Snmp功能(一)
  4. 数据分箱技术在Python中实现
  5. Jetty和Tomcat的比较
  6. 前端学习(2423):补充markdown语法补充
  7. 基于CSE的微服务架构实践-Spring Boot技术栈选型
  8. 若有下列共用体定义_危险品运输包装定义有哪些?你需要了解的在这里
  9. codevs——1044 拦截导弹(序列DP)
  10. crossover卸载 linux,Ubuntu中卸载CrossOver困难?那是你没学会这个命令
  11. 2020计算机考试系统office,2020年3月计算机二级考试,大学生office考试教材,仿真考试系统...
  12. 《Java 8 实战》 学习笔记一(行为参数化)
  13. matlab 拟合曲线 预测,matlab曲线拟合和预测
  14. 基于python代码的3D地图可视化
  15. 深入理解JAVA中的跨包继承
  16. debian linux系统安装教程,Debian 10(Buster)安装过程图文详解
  17. SAP中通过格式调整解决导出EXCEL表字段显示不全问题
  18. STM32F10xxx启动模式分析 – 梦想照旧
  19. MySQL索引重复插入数据报错
  20. Arcgis中的标注操作(一)

热门文章

  1. origin数据平滑_研发工程师必备:20条实用origin技能,让作图效率飞起来
  2. vue中如何实现点击某个地方,让echarts生成的图表发生变化
  3. c语言memcopy_C语言中memcpy 函数的用法详解
  4. annotations' in project ':test'. Resolved versions for app (26.1.0) and test app (27.1.1) differ
  5. html怎么一段时间把网页背景更换_复盛螺杆压缩机故障怎么维修?
  6. 外媒对中国量子计算机,中国超算世界第一,美国却研发出量子计算机,外媒:秒杀中国超算...
  7. input 中的autoComplete属性
  8. java集成groovy
  9. Python 爬取周杰伦instagram
  10. Android 封装一个通用的PopupWindow