Python對(duì)XML文件實(shí)現(xiàn)增刪改查操作
PYTHON 操作 XML
讀取XML文件
關(guān)于XML的介紹
<data> 與 </data> 是一對(duì)標(biāo)簽的開(kāi)始與結(jié)束
<property … /> 也是一個(gè)正確的標(biāo)簽,以 /> 結(jié)尾,是在標(biāo)簽沒(méi)有嵌套內(nèi)容時(shí)的簡(jiǎn)寫(xiě)形式
name=“cat”,name是<data>標(biāo)簽的一個(gè)屬性,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)備一個(gè)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é)點(diǎn)
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é)點(diǎn)(包括子孫節(jié)點(diǎn))
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é)點(diǎn)
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
添加X(jué)ML元素
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對(duì)XML文件實(shí)現(xiàn)增刪改查操作的文章就介紹到這了,更多相關(guān)Python XML增刪改查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytorch tensor int型除法出現(xiàn)的問(wèn)題
這篇文章主要介紹了pytorch tensor int型除法出現(xiàn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
基于PyInstaller各參數(shù)的含義說(shuō)明
這篇文章主要介紹了基于PyInstaller各參數(shù)的含義說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
使用Python模塊進(jìn)行數(shù)據(jù)處理的詳細(xì)步驟
Python 提供了豐富的模塊和庫(kù),用于處理各種類(lèi)型的數(shù)據(jù),本文介紹了一些常用的模塊和庫(kù),以及如何使用它們進(jìn)行數(shù)據(jù)處理的詳細(xì)步驟和代碼示例,對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2025-02-02
python腳本實(shí)現(xiàn)分析dns日志并對(duì)受訪域名排行
這篇文章主要介紹了python腳本實(shí)現(xiàn)分析dns日志并對(duì)受訪域名排行,本文是在Windows服務(wù)器環(huán)境中實(shí)現(xiàn),需要的朋友可以參考下2014-09-09
一文詳解Python如何優(yōu)雅地對(duì)數(shù)據(jù)進(jìn)行分組
這篇文章主要和大家詳細(xì)介紹一下Python是如何優(yōu)雅地對(duì)數(shù)據(jù)進(jìn)行分組的,文中通過(guò)示例進(jìn)行了詳細(xì)的講解,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-07-07

