Python 标准库之 XML(下)
本文作者:Rocky0249
公眾號:Python空間
寫在之前
隔了1天了,不知道你們還記得上一篇文章的內容不,如果不記得的話請移步 --?Python 標準庫之 XML(上)。
今天我們繼續來學習 XML 的剩下的內容,主要是編輯和一些常用屬性和方法的總結,下面開始今天的學習。
編輯(增刪改查)
我們還是用上一篇文章中的例子,為了方便查看,我把內容再粘貼過來,下面的內容記得保存并且命名為 test.xml。
<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 進行編輯,也就是增刪改查的功能,下面我們來操作一下:
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 對象。那么該如何做呢?請接著往下看:
>> outpath = os.getcwd()
>> file = outpath + "/test.xml"
把當前文件的路徑拼裝好。
做完上面的操作以后再去看源文件,已經變成兩個節點了。
除了刪除,也是可以修改的:
? ?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)
然后我們來查看一下源文件:
<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 的書,可以像下面這樣操作:
for book in root.findall("book"):
? ?price = book.find("price").text
? ?if float(price) == 50:
? ? ? ? ? ?root.remove(book)
...
tree.write(file)
于是就有了下面的結果:
<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>
接下來我們來看看增加元素:
>> 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)
...
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。
推薦閱讀:
一文徹底搞懂 Python 生成器!
一文徹底搞懂 Python 裝飾器!
加我微信獲取?10 本?Python 經典書籍
總結
以上是生活随笔為你收集整理的Python 标准库之 XML(下)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【资源】分享1套最适合Py开发的机器学习
- 下一篇: 哪个小姐姐是假的?Yann LeCun说