Python對XML文件實現(xiàn)增刪改查操作
PYTHON 操作 XML
讀取XML文件
關(guān)于XML的介紹
<data> 與 </data> 是一對標(biāo)簽的開始與結(jié)束
<property … /> 也是一個正確的標(biāo)簽,以 /> 結(jié)尾,是在標(biāo)簽沒有嵌套內(nèi)容時的簡寫形式
name=“cat”,name是<data>標(biāo)簽的一個屬性,cat是name屬性的值
description here …是<data>標(biāo)簽的內(nèi)容,這里是一段文本。當(dāng)然也可以是xml的嵌套
<data name="cat" num="10"> description here ... </data> <property value="node" /> <country name="china"> <province name="beijing"> <school name="the sunshine school" /> </province> </country>
準(zhǔn)備一個demo.xml文件
<data> <teacher name="Albert"> <birthday>1980</birthday> <gender>male</gender> <subject>Math</subject> </teacher> <student name="Becky"> <birthday>2000</birthday> <gender>female</gender> <hobbies> <hobby>skating</hobby> <hobby>rocks</hobby> </hobbies> <exam absence="no"> <math>90</math> <english>90</english> <music>95</music> </exam> </student> <student name="Cindy"> <birthday>2001</birthday> <gender>female</gender> <hobbies> <hobby>reading</hobby> <hobby>guitar</hobby> </hobbies> <exam absence="yes"> </exam> </student> <student name="Duke"> <birthday>2000</birthday> <gender>male</gender> <hobbies> <hobby>football</hobby> <hobby>surfing</hobby> </hobbies> <exam absence="no"> <math>100</math> <english>80</english> <music>92</music> </exam> </student> </data>
讀取xml文件內(nèi)容
# Read the .xml file tree = ET.parse("demo.xml") root = tree.getroot() print(root)
結(jié)果
<Element 'data' at 0x102d80cf8>
遍歷XML元素
for … in … 可以遍歷當(dāng)前元素的所有直接子節(jié)點
for n in root: # items() returns all <key, value> pairs of the tag print(n, n.tag , n.attrib, n.items())
結(jié)果
(<Element 'teacher' at 0x1048b9e48>, 'teacher', {'name': 'Albert'}, [('name', 'Albert')])
(<Element 'student' at 0x1048bf0f0>, 'student', {'name': 'Becky'}, [('name', 'Becky')])
(<Element 'student' at 0x1048bf3c8>, 'student', {'name': 'Cindy'}, [('name', 'Cindy')])
(<Element 'student' at 0x1048bf5f8>, 'student', {'name': 'Duke'}, [('name', 'Duke')])
想要迭代遍歷當(dāng)前元素的所有子節(jié)點(包括子孫節(jié)點)
for n in root.iter(): print(n, n.tag)
結(jié)果
(<Element 'data' at 0x1052f0cf8>, 'data')
(<Element 'teacher' at 0x1052f0e48>, 'teacher')
(<Element 'birthday' at 0x1052f0d30>, 'birthday')
(<Element 'gender' at 0x1052f6080>, 'gender')
(<Element 'subject' at 0x1052f60b8>, 'subject')
(<Element 'student' at 0x1052f60f0>, 'student')
(<Element 'birthday' at 0x1052f6048>, 'birthday')
(<Element 'gender' at 0x1052f6128>, 'gender')
(<Element 'hobbies' at 0x1052f6198>, 'hobbies')
(<Element 'hobby' at 0x1052f6208>, 'hobby')
(<Element 'hobby' at 0x1052f6240>, 'hobby')
(<Element 'exam' at 0x1052f62b0>, 'exam')
(<Element 'math' at 0x1052f6320>, 'math')
(<Element 'english' at 0x1052f6390>, 'english')
(<Element 'music' at 0x1052f6400>, 'music')
(<Element 'student' at 0x1052f63c8>, 'student')
(<Element 'birthday' at 0x1052f6438>, 'birthday')
(<Element 'gender' at 0x1052f6470>, 'gender')
(<Element 'hobbies' at 0x1052f64a8>, 'hobbies')
(<Element 'hobby' at 0x1052f6518>, 'hobby')
(<Element 'hobby' at 0x1052f6588>, 'hobby')
(<Element 'exam' at 0x1052f65c0>, 'exam')
(<Element 'student' at 0x1052f65f8>, 'student')
(<Element 'birthday' at 0x1052f6630>, 'birthday')
(<Element 'gender' at 0x1052f6668>, 'gender')
(<Element 'hobbies' at 0x1052f66a0>, 'hobbies')
(<Element 'hobby' at 0x1052f6710>, 'hobby')
(<Element 'hobby' at 0x1052f6780>, 'hobby')
(<Element 'exam' at 0x1052f67b8>, 'exam')
(<Element 'math' at 0x1052f6828>, 'math')
(<Element 'english' at 0x1052f6898>, 'english')
(<Element 'music' at 0x1052f6908>, 'music')
想要選擇性地迭代直接子節(jié)點
for n in root.iter('teacher'): print(n, n.tag)
(<Element 'teacher' at 0x100f29e48>, 'teacher')
查找XML元素
find與findall查找xml元素
# find the first element print(root.find('student')) # find all elements print(root.findall('student'))
<Element 'student' at 0x1034300f0> [<Element 'student' at 0x1034300f0>, <Element 'student' at 0x1034303c8>, <Element 'student' at 0x1034305f8>]
demo
for n in root: if n.tag == 'student' and n.get('name') == 'Becky': exam_node = n.find('exam') for subject in exam_node: print(subject.tag + " " + subject.text)
結(jié)果
math 90
english 90
music 95
添加XML元素
p = ET.Element(tag_name)
demo
for n in root: if n.tag == 'student' and n.get('name') == 'Cindy': exam_node = n.find('exam') exam_node.set("absence", "no") for subject in ['math', 'music']: p = ET.Element(subject) p.text = '90' exam_node.append(p) if os.path.exists('new.xml'): os.remove('new.xml') tree.write('new.xml', encoding='utf-8', xml_declaration=True)
結(jié)果
<student name="Cindy">
<birthday>2001</birthday>
<gender>female</gender>
<hobbies>
<hobby>reading</hobby>
<hobby>guitar</hobby>
</hobbies>
<exam absence="no">
<math>90</math><music>90</music></exam>
</student>
修改XML元素
demo
for n in root: if n.tag == 'student' and n.get('name') == 'Cindy': exam_node = n.find('exam') exam_node.set("absence", "no") exam_node.set("date", "2022-11-11") for subject in ['math', 'music']: p = ET.Element(subject) p.text = '90' exam_node.append(p) hobbies_node = n.find('hobbies').findall("hobby") hobbies_node[0].text = 'piano' p = ET.Element("hobby") p.set("old_hobby", 'yes') p.text = 'reading' n.find('hobbies').remove(hobbies_node[1]) n.find('hobbies').append(p)
結(jié)果
<student name="Cindy">
<birthday>2001</birthday>
<gender>female</gender>
<hobbies>
<hobby>piano</hobby>
<hobby old_hobby="yes">reading</hobby></hobbies>
<exam absence="no" date="2022-11-11">
<math>90</math><music>90</music></exam>
</student>
到此這篇關(guān)于Python對XML文件實現(xiàn)增刪改查操作的文章就介紹到這了,更多相關(guān)Python XML增刪改查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python數(shù)據(jù)可視化處理庫PyEcharts柱狀圖,餅圖,線性圖,詞云圖常用實例詳解
這篇文章主要介紹了Python數(shù)據(jù)可視化處理庫PyEcharts柱狀圖、餅圖、線性圖常用實例詳解,需要的朋友可以參考下2020-02-02python實現(xiàn)圖片,視頻人臉識別(opencv版)
這篇文章主要介紹了python實現(xiàn)圖像,視頻人臉識別(opencv版)的的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-11-11500行python代碼實現(xiàn)飛機大戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了500行python代碼實現(xiàn)飛機大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-04-04Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式
這篇文章主要介紹了Mysql數(shù)據(jù)庫反向生成Django里面的models指令方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05python 如何把classification_report輸出到csv文件
這篇文章主要介紹了python 把classification_report輸出到csv文件的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05python用opencv將標(biāo)注提取畫框到對應(yīng)的圖像中
這篇文章主要介紹了python用opencv將標(biāo)注提取畫框到對應(yīng)的圖像中,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08python用quad、dblquad實現(xiàn)一維二維積分的實例詳解
今天小編大家分享一篇python用quad、dblquad實現(xiàn)一維二維積分的實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11python使用socket 先讀取長度,在讀取報文內(nèi)容示例
這篇文章主要介紹了python使用socket 先讀取長度,在讀取報文內(nèi)容,涉及Python socket通信報文操作相關(guān)使用技巧,需要的朋友可以參考下2019-09-09