pythonxml库_Python 标准库之 XML(下)

写在之前

大家好,这是首发在我公众号「Python空间」的第 72 篇文章,欢迎关注,期待和你的交流。

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

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

编辑(增删改查)

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

Everyday Italian

Giada De Laurentiis

2005

30.00

Harry Potter

J K. Rowling

2005

29.99

Learning XML

Erik T. Ray

2003

39.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)

...

book

book

如上,我们成功的删除了一个节点,原来有 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.00

39.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 Italian

Giada De Laurentiis

2005

50.0

Learning XML

Erik T. Ray

2003

49.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 XML

Erik T. Ray

2003

49.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)

...

book

book

>>> 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。

e48fd18d1d7c71570a56fd6ad958253f3c5ccf40.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值