欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python處理xml文件操作詳解

 更新時(shí)間:2022年07月18日 09:56:16   作者:Mwyldnje2003  
這篇文章主要介紹了python處理xml文件操作詳解,文章圍繞主題展開詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

1、python 操作xml的方式介紹

查看全部包含“三種?法:

  • ?是xml.dom. * 模塊,它是W3CDOMAPI的實(shí)現(xiàn),若需要處理DOMAPI則該模塊很適合;
  •  ?是xml.sax. * 模塊,它是SAXAPI的實(shí)現(xiàn),這個(gè)模塊犧牲了便捷性來換取速度和內(nèi)存占?,SAX是?個(gè)基于事件的API,這就意味著它可以“在空中”處理龐?數(shù)量的的?檔,不?完全加載進(jìn)內(nèi)存;
  • 三是xml.etree.ElementTree模塊(簡稱 ET),它提供了輕量級的Python式的API,相對于DOM來說ET 快了很多,?且有很多令?愉悅的API可以使?,相對于SAX來說ET的ET.iterparse也提供了 “在空中” 的處理?式,沒有必要加載整個(gè)?檔到內(nèi)存,ET的性能的平均值和SAX差不多,但是API的效率更??點(diǎn)?且使?起來很?便。”的文檔

2、ElementTree模塊

解析xml文件并獲取根節(jié)點(diǎn):

from xml.etree import ElementTree as ET

# 1、打開xml文件
tree =ET.parse(r"E:\Acctrue2.0Test\testData\N0530YPYM001.xml")
# 獲xml文件的內(nèi)容取根標(biāo)簽
root = tree.getroot()
print(root)

3、解析xml格式字符串并獲取根節(jié)點(diǎn)

注意xml格式的內(nèi)容應(yīng)該沒有xml格式聲明的內(nèi)容“<?xml version="1.0" encoding="UTF-8"?>”,

如果有則會(huì)解析錯(cuò)誤:

content = """
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="關(guān)聯(lián)關(guān)系XML Schema-3.0.xsd" License="">
  <Events version="3.0">
    <Event name="RelationCreate">
      <Relation productCode="06970593810109" subTypeNo="06970593810109" cascade="1" packageSpec="50人份/盒" comment="" linkProductCode="" assCorpCode="">
		<Batch batchNo="N0530001" madeDate="2022-05-30" validateDate="2023-05-29" workshop="無" lineName="無" lineManager="無">
			<Code curCode="010697059381010910N053000117230527" packLayer="1" parentCode="" flag="0" />
		 </Batch>
      </Relation>
    </Event>
  </Events>
</Document>
"""
root2= ET.XML(content)
print(root2)

4、讀取節(jié)點(diǎn)內(nèi)容,getroot()

獲取標(biāo)簽名,獲取標(biāo)簽屬性及獲取標(biāo)簽文本:

# 1、打開xml文件
tree =ET.parse(r"E:\Acctrue2.0Test\testData\N0530YPYM001.xml")
# 獲xml文件的內(nèi)容取根標(biāo)簽
root = tree.getroot()
# 2、讀取節(jié)點(diǎn)內(nèi)容
# 2.1 獲取根標(biāo)簽下的子標(biāo)簽
for child in root: 獲取根節(jié)點(diǎn)下的子標(biāo)簽
    print(child.tag)      #  *.tag 是獲取標(biāo)簽名字(字符串類型)
    print( child.attrib)  #  *.attrib是獲取標(biāo)簽屬性(字典類型)
    for node in child:   獲取跟標(biāo)簽下子標(biāo)簽的子標(biāo)簽
        print(node.tag)
        print(node.attrib)
        print(node.text)   # *.text 獲取標(biāo)簽文本

5、通標(biāo)標(biāo)簽名直接獲取標(biāo)簽(find,findall)

find() # 此種寫法只能獲取根標(biāo)簽下的一級子標(biāo)簽,即只能查詢下一級標(biāo)簽,不能查詢到下一級的下一級標(biāo)簽,且找到的是第一個(gè)相應(yīng)的標(biāo)簽
findall()此種寫法只能獲取根標(biāo)簽下的一級子標(biāo)簽,即只能查詢下一級標(biāo)簽,不能查詢到下一級的下一級標(biāo)簽 ,但是找到下一級的所有符合名稱的標(biāo)簽

# 1、打開xml文件
from xml.etree import ElementTree as ET
# 1、打開xml文件
from xml.etree import ElementTree as ET
tree =ET.parse(r"E:\Acctrue2.0Test\testData\N0530YPYM001.xml")
# 獲xml文件的內(nèi)容取根標(biāo)簽
root = tree.getroot()
print(root)
# 2.2 通過標(biāo)簽名稱獲取標(biāo)簽 find()
events_object = root.find("Events")  # 此種寫法只能獲取根標(biāo)簽下的一級子標(biāo)簽,即只能查詢下一級標(biāo)簽,不能查詢到下一級的下一級標(biāo)簽,**且找到的是第一個(gè)響應(yīng)的標(biāo)簽**
print(events_object.tag, events_object.attrib)

event_object = events_object.find("Event")   # 進(jìn)一步獲取跟標(biāo)簽下子標(biāo)簽的子標(biāo)簽
print(event_object.tag,event_object.attrib)

# 2.3 通過標(biāo)簽名稱獲取標(biāo)簽 findall()
events_objects = root.findall("Events")  # 此種寫法只能獲取根標(biāo)簽下的一級子標(biāo)簽,即只能查詢下一級標(biāo)簽,不能查詢到下一級的下一級標(biāo)簽,但是可以獲取下一級所有符合名稱的標(biāo)簽
for event_clee in events_objects:
    print(event_clee.tag, event_clee.attrib)
    event_object = event_clee.findall("Event")   # 進(jìn)一步獲取跟標(biāo)簽下子標(biāo)簽的子標(biāo)簽
    for relation_cell in event_object:
        print(relation_cell.tag, relation_cell.attrib)

# 2.4 findall(xpath)
Events_object = root.findall('.//Code')
Events_object1 = root.findall('.//Code[@curCode="010697059381010910N053000117230527"]')
Events_object2 = root.findall('.//*[@curCode="010697059381010910N053000117230527"]')
#注意 前面的“.”不能省略,
print(Events_object)
print(Events_object1)
print(Events_object2[0])

6、全文搜索標(biāo)簽名(類似xpath路徑查找標(biāo)簽)

from xml.etree import ElementTree as ET

# 1、打開xml文件
tree =ET.parse(r"E:\Acctrue2.0Test\testData\N0530YPYM001.xml")
# 獲xml文件的內(nèi)容取根標(biāo)簽
root = tree.getroot()
print(root)
# 2.2 根據(jù)標(biāo)簽名全文搜索標(biāo)簽
Code_object = root.iter("Code")   全文搜索標(biāo)簽名為“Code”的標(biāo)簽
print(Code_object)
for code in Code_object:
    print(code.tag, code.attrib)

7、修改節(jié)點(diǎn)

from xml.etree import ElementTree as ET
tree =ET.parse(r"E:\Acctrue2.0Test\testData\N0530YPYM001.xml")
# 獲xml文件的內(nèi)容取根標(biāo)簽
root = tree.getroot()

relation_object = root.find("Events").find("Event").iter("Relation") # 獲取第一個(gè)Events的一級子標(biāo)簽下的Relation子標(biāo)簽
for relation_cell in relation_object:
    relation_cell.set("productCode", "產(chǎn)品編碼")    #  如果有相應(yīng)屬性,則修改屬性值,沒有則新增
    relation_cell.set("productCode2", "產(chǎn)品編碼2")
    relation_cell.find("Batch").find("Code").text="追溯碼"  # 注意:如果之前是短標(biāo)簽,增加文本屬性后自動(dòng)變?yōu)殚L標(biāo)簽。
tree = ET.ElementTree(root)
tree.write("new.xml", encoding="utf-8",short_empty_elements=True)    # 如果文件不存在,則創(chuàng)建文件,如果文件已存在則修改響應(yīng)內(nèi)容

8、刪除節(jié)點(diǎn)

from xml.etree import ElementTree as ET
tree =ET.parse(r"E:\Acctrue2.0Test\testData\N0530YPYM001.xml")
# 獲xml文件的內(nèi)容取根標(biāo)簽
root = tree.getroot()
# ####################錯(cuò)誤的刪除方式########################
# # 獲取響應(yīng)標(biāo)簽
# Event_object = root.find("Events").find("Event")
# # 刪除相應(yīng)標(biāo)簽
# root.remove(Event_object)   # 刪除只能刪除其子標(biāo)簽,不能刪除其子標(biāo)簽下的子標(biāo)簽,因?yàn)閞elation_object是子標(biāo)簽下的子標(biāo)簽,因此此時(shí)刪除失敗

################## 正確的刪除方式#############################
Events_object = root.find("Events")
Event_object = Events_object.find("Event")
Events_object.remove(Event_object)
tree = ET.ElementTree(root)
tree.write("new.xml", encoding="utf-8")    # 如果文件不存在,則創(chuàng)建文件,如果文件已存在則修改響應(yīng)內(nèi)容

9、構(gòu)建文件

方式1 (Element)

先創(chuàng)建各類標(biāo)簽,再建立標(biāo)簽之間關(guān)系:

from xml.etree import ElementTree as ET
# 創(chuàng)建根標(biāo)簽
root = ET.Element("root")
# 創(chuàng)建一個(gè)標(biāo)簽tagName1
tagName1 = ET.Element("tagName1", {"tag1Attribute":"AttributeValue1"})
# 創(chuàng)建一個(gè)標(biāo)簽tagName2
tagName2 = ET.Element("tagName2", {"tag2Attribute":"AttributeValue2"})
# 創(chuàng)建一個(gè)標(biāo)簽tagName11
tagName11 = ET.Element("tagName11", {"tag11Attribute":"AttributeValue11"})
# 創(chuàng)建一個(gè)標(biāo)簽tagName12
tagName12 = ET.Element("tagName12", {"tag12Attribute":"AttributeValue12"})
# 將標(biāo)簽tagName11和tagName12 添加的tagName1中作為tagName1的子標(biāo)簽
tagName1.append(tagName11)
tagName1.append(tagName12)
# 將標(biāo)簽tagName1和tagName2 添加的root中作為root的子標(biāo)簽
root.append(tagName1)
root.append(tagName2)
# 保存
tree = ET.ElementTree(root)
tree.write("newCreate.xml", xml_declaration=True,  encoding="utf-8",short_empty_elements=True)
# xml_declaration是否包含聲明文件, encoding編碼方式,short_empty_elements 規(guī)定是短標(biāo)簽(單標(biāo)簽)還是雙標(biāo)簽
<?xml version='1.0' encoding='utf-8'?>
<root>
    <tagName1 tag1Attribute="AttributeValue1">
        <tagName11 tag11Attribute="AttributeValue11"/>
        <tagName12 tag12Attribute="AttributeValue12"/>
    </tagName1>
    <tagName2 tag2Attribute="AttributeValue2"/>
</root>

方式2 (makeelement)

from xml.etree import ElementTree as ET
# 創(chuàng)建根節(jié)點(diǎn)
root = ET.Element("family")

# 創(chuàng)建一級子標(biāo)簽
son1 = root.makeelement("son", {"name":"son1"})
son2 = root.makeelement("son", {"name":"son2"})

# 創(chuàng)建二級子標(biāo)簽
grandson1 = son1.makeelement("grandson1", {"name":"grandson1"})
grandson2 = son1.makeelement("grandson1", {"name":"grandson2"})

# 將二級子標(biāo)簽與一級子標(biāo)簽關(guān)聯(lián)
son1.append(grandson1)
son1.append(grandson2)
# 將一級子標(biāo)簽與根標(biāo)簽關(guān)聯(lián)
root.append(son2)
root.append(son1)
tree = ET.ElementTree(root)
tree.write("../testData/neswfile.xml", xml_declaration=True, encoding="utf-8")

方式3

此種方式是在創(chuàng)建元素時(shí)直接建立相關(guān)關(guān)系:

from xml.etree import ElementTree as ET

# 創(chuàng)建根節(jié)點(diǎn)
root = ET.Element("family")
# 創(chuàng)建一級子標(biāo)簽
son1 = ET.SubElement(root, "son", {"name":"son1"})
son2 = ET.SubElement(root,"son", {"name":"son2"})

# 創(chuàng)建二級子標(biāo)簽
grandson1 = ET.SubElement(son1,"grandson1", {"name":"grandson1"})
grandson1.text="大孫子"
grandson2 = ET.SubElement(son1,"grandson1", {"name":"grandson2"})
grandson2.text="小孫子"
tree = ET.ElementTree(root)
tree.write("../testData/neswfile.xml", xml_declaration=True, encoding="utf-8")
<?xml version='1.0' encoding='utf-8'?>
<family>
    <son name="son1">
        <grandson1 name="grandson1">大孫子</grandson1>
        <grandson1 name="grandson2">小孫子</grandson1>
    </son>
    <son name="son2"/>
</family>

到此這篇關(guān)于python處理xml文件操作詳解的文章就介紹到這了,更多相關(guān)python處理xml內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中json格式數(shù)據(jù)的編碼與解碼方法詳解

    Python中json格式數(shù)據(jù)的編碼與解碼方法詳解

    這篇文章主要介紹了Python中json格式數(shù)據(jù)的編碼與解碼方法,詳細(xì)分析了Python針對json格式數(shù)據(jù)的編碼轉(zhuǎn)換操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • Python中裝飾器高級用法詳解

    Python中裝飾器高級用法詳解

    這篇文章主要介紹了Python中的裝飾器的高級用法,以實(shí)例形式詳細(xì)的分析了Python中的裝飾器的使用技巧及相關(guān)注意事項(xiàng)
    2017-12-12
  • Python中用post、get方式提交數(shù)據(jù)的方法示例

    Python中用post、get方式提交數(shù)據(jù)的方法示例

    最近在學(xué)習(xí)使用Python,發(fā)現(xiàn)網(wǎng)上很少提到如何使用post,所以下面這篇文章主要給大家介紹了關(guān)于Python中用post、get方式提交數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-09-09
  • python和pyqt實(shí)現(xiàn)360的CLable控件

    python和pyqt實(shí)現(xiàn)360的CLable控件

    這篇文章主要介紹了python和pyqt實(shí)現(xiàn)360的CLable控件示例,需要的朋友可以參考下
    2014-02-02
  • Django中如何防范CSRF跨站點(diǎn)請求偽造攻擊的實(shí)現(xiàn)

    Django中如何防范CSRF跨站點(diǎn)請求偽造攻擊的實(shí)現(xiàn)

    這篇文章主要介紹了Django中如何防范CSRF跨站點(diǎn)請求偽造攻擊的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • pip安裝python庫的方法總結(jié)

    pip安裝python庫的方法總結(jié)

    在本篇文章里小編給大家分享了關(guān)于使用pip安裝python庫的幾種常用方法,有需要的朋友們可以參考下。
    2019-08-08
  • 經(jīng)驗(yàn)豐富程序員才知道的15種高級Python小技巧(收藏)

    經(jīng)驗(yàn)豐富程序員才知道的15種高級Python小技巧(收藏)

    本文將介紹15個(gè)簡潔的Python技巧,向著簡潔更高效,學(xué)習(xí)易懂出發(fā),具說只有經(jīng)驗(yàn)豐富程序員才知道的15種高級Python小技巧,喜歡的朋友快來看看吧
    2021-10-10
  • Python快速實(shí)現(xiàn)分列轉(zhuǎn)到行的示例代碼

    Python快速實(shí)現(xiàn)分列轉(zhuǎn)到行的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Python快速實(shí)現(xiàn)分列轉(zhuǎn)到行的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)一下
    2023-03-03
  • 如何用Pytorch搭建一個(gè)房價(jià)預(yù)測模型

    如何用Pytorch搭建一個(gè)房價(jià)預(yù)測模型

    這篇文章主要介紹了用Pytorch搭建一個(gè)房價(jià)預(yù)測模型,在這里我將主要討論P(yáng)yTorch建模的相關(guān)方面,作為一點(diǎn)額外的內(nèi)容,我還將演示PyTorch中開發(fā)的模型的神經(jīng)元重要性,需要的朋友可以參考下
    2023-03-03
  • Django零基礎(chǔ)入門之自定義過濾器及模板中的使用

    Django零基礎(chǔ)入門之自定義過濾器及模板中的使用

    這篇文章主要介紹了Django零基礎(chǔ)入門之自定義過濾器及模板中的使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09

最新評論