<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
可延伸標示語言,是一種簡單的資料儲存語言,XML被設計用來傳輸和儲存資料
<data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2023</year> <gdppc>141100</gdppc> <neighbor direction="E" name="Austria" /> <neighbor direction="W" name="Switzerland" /> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2026</year> <gdppc>59900</gdppc> <neighbor direction="N" name="Malaysia" /> </country> <country name="Panama"> <rank updated="yes">69</rank> <year>2026</year> <gdppc>13600</gdppc> <neighbor direction="W" name="Costa Rica" /> <neighbor direction="E" name="Colombia" /> </country> </data>
#導包 from xml.etree import ElementTree as ET # ET去開啟xml檔案 tree = ET.parse("files/xo.xml") # 獲取根標籤 root = tree.getroot() print(root) # <Element 'data' at 0x7f94e02763b0>
獲取根標籤
root = ET.XML(content)
查詢節點【預設找第一個】 find()
country_object = root.find("country") print(country_object) #<Element 'country' at 0x0000020D57DFB220>
獲取節點標籤 tag
country_object.tag #country
獲取節點屬性 attrib
country_object.attrib #{'name': 'Liechtenstein'}
獲取節點文字 text
gdppc_object.text #141100
迴圈節點
# 獲取data標籤的孩子標籤 for child in root: print(child.tag, child.attrib) #獲取child標籤的孩子標籤 for node in child: print(node.tag, node.attrib, node.text)
查詢所有標籤 iter()
# 獲取data裡面所有year標籤 for child in root.iter('year'): print(child.tag, child.text)
查詢所有標籤 findall()
# 查詢所有的country標籤 v1 = root.findall('country')
查詢標籤
# 查詢country裡面的rank標籤,找第一個 v2 = root.find('country').find('rank')
【修改和刪除內容只在記憶體中修改,沒有存到檔案中,都要重新儲存檔案】
修改節點內容
#修改rank文字 rank.text = "999" tree = ET.ElementTree(root) tree.write("new.xml", encoding='utf-8')
修改節點屬性
#修改rank屬性 rank.set('update', '2020-11-11') tree = ET.ElementTree(root) tree.write("new.xml", encoding='utf-8')
儲存檔案
tree = ET.ElementTree(root) tree.write("new.xml", encoding='utf-8')
刪除節點
root.remove( root.find('country') ) tree = ET.ElementTree(root) tree.write("new.xml", encoding='utf-8')
<home> <son name="兒1"> <grandson name="兒11"></grandson> <grandson name="兒12"></grandson> </son> <son name="兒2"></son> </home>
from xml.etree import ElementTree as ET #建立根標籤 root=ET.Element('home') # 建立大兒子,與root還沒有關係 son1=ET.Element('son',{'name':'兒1'}) #建立小兒子,與root還沒有關係 son2=ET.Element('son',{'name':'兒2'}) #建立2個孫子 grandson1=ET.Element('grandson',{'name':'兒11'}) grandson2=ET.Element('grandson',{'name':'兒12'}) # 建立兩個孫子,與son1還沒有關係 son1.append(grandson1) son1.append(grandson2) # 把兒子新增到根節點 root.append(son1) root.append(son2) #root節點放到根節點中 tree=ET.ElementTree(root) #儲存xml檔案 # short_empty_elements=True,節點中沒有元素,用簡寫方式顯範例:<grandson name="兒11" /> tree.write('file/root.xml',encoding='utf-8',short_empty_elements=True)
方式二 標籤.makeelement()
<famliy> <son name="兒1"> <grandson name="兒11"></grandson> <grandson name="兒12"></grandson> </son> <son name="兒2"></son> </famliy>
from xml.etree import ElementTree as ET # 建立根節點 root = ET.Element("famliy") # 建立大兒子,與root還沒有關係 son1 = root.makeelement('son', {'name': '兒1'}) #建立小兒子,與root還沒有關係 son2 = root.makeelement('son', {"name": '兒2'}) # 建立兩個孫子,與son1還沒有關係 grandson1 = son1.makeelement('grandson', {'name': '兒11'}) grandson2 = son1.makeelement('grandson', {'name': '兒12'}) son1.append(grandson1) son1.append(grandson2) # 把兒子新增到根節點中 root.append(son1) root.append(son2) tree = ET.ElementTree(root) tree.write('oooo.xml',encoding='utf-8')
方式三 標籤.SubElement(),建立標籤的子標籤
<famliy> <son name="兒1"> <age name="兒11">孫子</age> </son> <son name="兒2"></son> </famliy>
from xml.etree import ElementTree as ET # 建立根節點 root = ET.Element("famliy") # 建立root節點的子標籤大兒子 son1 = ET.SubElement(root, "son", attrib={'name': '兒1'}) # 建立root節點的子標籤小兒子 son2 = ET.SubElement(root, "son", attrib={"name": "兒2"}) # 在大兒子中建立一個孫子 grandson1 = ET.SubElement(son1, "age", attrib={'name': '兒11'}) grandson1.text = '孫子' et = ET.ElementTree(root) #生成檔案物件 et.write("test.xml", encoding="utf-8")
方式四
<user><![CDATA[你好呀]]</user>
from xml.etree import ElementTree as ET # 建立根節點 root = ET.Element("user") #<![CDATA[你好呀]]直接新增到文字裡 root.text = "<![CDATA[你好呀]]" et = ET.ElementTree(root) # 生成檔案物件 et.write("test.xml", encoding="utf-8")
記錄工作中常用的一個小技巧
cmd控制檯安裝第三方模組:
pip install xmltodict
新建一個1.xml檔案:
<note date="23/04/2022"> <to>tom</to> <from>mary</from> <msg>love</msg></note>
轉換程式碼實現:
import jsonimport xmltodictdef xml_to_json(xml_str): """parse是的xml解析器,引數需要 :param xml_str: xml字串 :return: json字串 """ xml_parse = xmltodict.parse(xml_str) # json庫dumps()是將dict轉化成json格式,loads()是將json轉化成dict格式。 # dumps()方法的ident=1,格式化json json_str = json.dumps(xml_parse, indent=1) return json_str XML_PATH = './1.xml' # xml檔案的路徑with open(XML_PATH, 'r') as f: xmlfile = f.read() with open(XML_PATH[:-3] + 'json', 'w') as newfile: newfile.write(xml_to_json(xmlfile))
輸出結果(生成json檔案):
新建test.json檔案:
{ "student": { "course": { "name": "math", "score": "90" }, "info": { "sex": "male", "name": "name" }, "stid": "10213" }}
轉換程式碼實現:
import xmltodictimport jsondef json_to_xml(python_dict): """xmltodict庫的unparse()json轉xml :param python_dict: python的字典物件 :return: xml字串 """ xml_str = xmltodict.unparse(python_dict) return xml_str JSON_PATH = './test.json' # json檔案的路徑with open(JSON_PATH, 'r') as f: jsonfile = f.read() python_dict = json.loads(jsonfile) # 將json字串轉換為python字典物件 with open(JSON_PATH[:-4] + 'xml', 'w') as newfile: newfile.write(json_to_xml(python_dict))
輸出結果(生成xml檔案):
到此這篇關於python操作XML格式檔案的文章就介紹到這了,更多相關python操作XML檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45