视网膜脱落

注册

 

发新话题 回复该主题

Python标准库之XML下 [复制链接]

1#
本文字数:字阅读本文大概需要:9分钟写在之前隔了两天了,不知道你们还记得文章的内容不,如果不记得的话请移步--Python标准库之XML(上)。今天我们继续来学习XML的剩下的内容,主要是编辑和一些常用属性和方法的总结,下面开始今天的学习。编辑(增删改查)我们还是用文章中的例子,为了方便查看,我把内容再粘贴过来,下面的内容记得保存并且命名为test.xml。bookstorebookcategory=COOKINGtitlelang=enEverydayItalian/titleauthorGiadaDeLaurentiis/authoryear/yearprice30.00/price/bookbookcategory=CHILDRENtitlelang=enHarryPotter/titleauthorJK.Rowling/authoryear/yearprice29.99/price/bookbookcategory=WEBtitlelang=enLearningXML/titleauthorErikT.Ray/authoryear/yearprice39.95/price/book/bookstore文章我们主要是对xml进行了读取的有关操作,其实还可以对XML进行编辑,也就是增删改查的功能,下面我们来操作一下:importxml.etree.ElementTreeasETtree=ET.ElementTree(file=test.xml)root=tree.getroot()#获得根root[1].tagbookdelroot[1]foreleinroot:...print(ele.tag)...bookbook如上,我们成功的删除了一个节点,原来有3个book节点,现在就只剩下两个了。接下来让我们打开源文件看看,是不是正好缺少了第2个节点呢?结果让我们很失望,源文件并没有什么变化。确实如此,源文件并没有变,因为到了这一步的修改动作还只是停留在内存里,还没有将修改的结果输出到文件,不要忘记我们是在内存中建立的ElementTree对象。那么该如何做呢?请接着往下看:importosoutpath=os.getcwd()file=outpath+/test.xml把当前文件的路径拼装好。tree.write(file)做完上面的操作以后再去看源文件,已经变成两个节点了。除了删除,也是可以修改的:forpriceinroot.iter(price)原来每本书的价格...print(price.text)...30..95forpriceinroot.iter(price)每本上涨10元并做标记...new_price=float(price.text)+10...price.text=str(new_price)...price.set(updated,up)...tree.write(file)然后我们来查看一下源文件:bookstorebookcategory=COOKINGtitlelang=enEverydayItalian/titleauthorGiadaDeLaurentiis/authoryear/yearpriceupdated=up50.0/price/bookbookcategory=WEBtitlelang=enLearningXML/titleauthorErikT.Ray/authoryear/yearpriceupdated=up49.95/price/book/bookstore通过对比我们可以发现,不仅价格改变了,而且在price标签里面增加了属性标记。上面我们是用del来删除某个元素,其实这个在编程中我们用的并不多,一般情况下更喜欢用remove()方法。比如要删除price=50的书,可以像下面这样操作:tree.write(file)forbookinroot.findall(book):...price=book.find(price).text...iffloat(price)==50:...root.remove(book)...tree.write(file)于是就有了下面的结果:bookstorebookcategory=WEBtitlelang=enLearningXML/titleauthorErikT.Ray/authoryear/yearpriceupdated=up49.95/price/book/bookstore接下来我们来看看增加元素:importxml.etree.ElementTreeasETtree=ET.ElementTree(file=test.xml)root=tree.getroot()ET.SubElement(root,book)#在root里面添加book节点Elementbookat0xCforeleinroot:...print(ele.tag)...bookbookb2=root[1]b2.text=pythontree.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的基本知识大体我就说这么多,至于明天推送什么我还没想好,有读者在后台说这个能不能弄几个题实战一下,我看看能不能找到什么能练的题,要是找到的话明天就写一下,要是找不到的合适的话就先放一下,以后想几个再更。不知道大家伙有没有看我昨天的文章,推荐的几个号,确实不错,没看的话可以找着再看看,真的很不错。如果你觉得本篇文章对你有所帮助的话,点个赞再走呀,谢谢。Theend。
分享 转发
TOP
发新话题 回复该主题