最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python操作XML格式文件的一些常見方法

 更新時間:2022年07月18日 16:41:34   作者:荼靡,  
最近有同學詢問如何利用Python處理xml文件,特此整理一篇比較簡潔的操作手冊,下面這篇文章主要給大家介紹了關于python操作XML格式文件的一些常見方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

前言

可擴展標記語言,是一種簡單的數(shù)據(jù)存儲語言,XML被設計用來傳輸和存儲數(shù)據(jù)

  • 存儲,可用來存放配置文件,例:java配置文件
  • 傳輸,網(wǎng)絡傳輸以這種格式存在,例:早期ajax傳輸數(shù)據(jù)等
<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>

1. 讀取文件和內(nèi)容

#導包
from xml.etree import ElementTree as ET

# ET去打開xml文件
tree = ET.parse("files/xo.xml")
# 獲取根標簽
root = tree.getroot()
print(root) # <Element 'data' at 0x7f94e02763b0>

2.讀取節(jié)點數(shù)據(jù)

獲取根標簽

root = ET.XML(content)

查找節(jié)點【默認找第一個】 find()

country_object = root.find("country")
print(country_object)  #<Element 'country' at 0x0000020D57DFB220>

獲取節(jié)點標簽 tag

country_object.tag  #country

獲取節(jié)點屬性 attrib

country_object.attrib   #{'name': 'Liechtenstein'}

獲取節(jié)點文本 text

gdppc_object.text    #141100

循環(huán)節(jié)點

# 獲取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')

3.修改和刪除節(jié)點

【修改和刪除內(nèi)容只在內(nèi)存中修改,沒有存到文件中,都要重新保存文件】

修改節(jié)點內(nèi)容

#修改rank文本
rank.text = "999"
tree = ET.ElementTree(root)
tree.write("new.xml", encoding='utf-8')

修改節(jié)點屬性

#修改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')

刪除節(jié)點

root.remove( root.find('country') )
tree = ET.ElementTree(root)
tree.write("new.xml", encoding='utf-8')

4.構建文檔 方式一ET.Element()

<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
#創(chuàng)建根標簽
root=ET.Element('home')
# 創(chuàng)建大兒子,與root還沒有關系
son1=ET.Element('son',{'name':'兒1'})
#創(chuàng)建小兒子,與root還沒有關系
son2=ET.Element('son',{'name':'兒2'})

#創(chuàng)建2個孫子
grandson1=ET.Element('grandson',{'name':'兒11'})
grandson2=ET.Element('grandson',{'name':'兒12'})

# 創(chuàng)建兩個孫子,與son1還沒有關系
son1.append(grandson1)
son1.append(grandson2)

# 把兒子添加到根節(jié)點
root.append(son1)
root.append(son2)

#root節(jié)點放到根節(jié)點中
tree=ET.ElementTree(root)
#保存xml文件
# short_empty_elements=True,節(jié)點中沒有元素,用簡寫方式顯示例:<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

# 創(chuàng)建根節(jié)點
root = ET.Element("famliy")

# 創(chuàng)建大兒子,與root還沒有關系
son1 = root.makeelement('son', {'name': '兒1'})

#創(chuàng)建小兒子,與root還沒有關系
son2 = root.makeelement('son', {"name": '兒2'})

# 創(chuàng)建兩個孫子,與son1還沒有關系
grandson1 = son1.makeelement('grandson', {'name': '兒11'})
grandson2 = son1.makeelement('grandson', {'name': '兒12'})

son1.append(grandson1)
son1.append(grandson2)

# 把兒子添加到根節(jié)點中
root.append(son1)
root.append(son2)

tree = ET.ElementTree(root)
tree.write('oooo.xml',encoding='utf-8')

方式三 標簽.SubElement(),創(chuàng)建標簽的子標簽

<famliy>
	<son name="兒1">
    	<age name="兒11">孫子</age>
    </son>
	<son name="兒2"></son>
</famliy>
from xml.etree import ElementTree as ET

# 創(chuàng)建根節(jié)點
root = ET.Element("famliy")

# 創(chuàng)建root節(jié)點的子標簽大兒子
son1 = ET.SubElement(root, "son", attrib={'name': '兒1'})
# 創(chuàng)建root節(jié)點的子標簽小兒子
son2 = ET.SubElement(root, "son", attrib={"name": "兒2"})

# 在大兒子中創(chuàng)建一個孫子
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

# 創(chuàng)建根節(jié)點
root = ET.Element("user")
#<![CDATA[你好呀]]直接添加到文本里
root.text = "<![CDATA[你好呀]]"

et = ET.ElementTree(root)  # 生成文檔對象
et.write("test.xml", encoding="utf-8")

補充:XML文件和JSON文件互轉(zhuǎn)

記錄工作中常用的一個小技巧

cmd控制臺安裝第三方模塊:

pip install xmltodict

1、XML文件轉(zhuǎn)為JSON文件

新建一個1.xml文件:

<note date="23/04/2022">
    <to>tom</to>
    <from>mary</from>
    <msg>love</msg></note>

轉(zhuǎn)換代碼實現(xiàn):

import jsonimport xmltodictdef xml_to_json(xml_str):
    """parse是的xml解析器,參數(shù)需要
    :param xml_str: xml字符串
    :return: json字符串
    """
    xml_parse = xmltodict.parse(xml_str)
    # json庫dumps()是將dict轉(zhuǎn)化成json格式,loads()是將json轉(zhuǎn)化成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文件):

2、JSON文件轉(zhuǎn)換為XML文件

新建test.json文件:

{
  "student": {
    "course": {
      "name": "math",
      "score": "90"
    },
    "info": {
      "sex": "male",
      "name": "name"
    },
    "stid": "10213"
  }}

轉(zhuǎn)換代碼實現(xiàn):

import xmltodictimport jsondef json_to_xml(python_dict):
    """xmltodict庫的unparse()json轉(zhuǎn)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字符串轉(zhuǎn)換為python字典對象
    with open(JSON_PATH[:-4] + 'xml', 'w') as newfile:
        newfile.write(json_to_xml(python_dict))

輸出結果(生成xml文件):

總結

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

相關文章

  • Pycharm中運行程序在Python?console中執(zhí)行,不是直接Run問題

    Pycharm中運行程序在Python?console中執(zhí)行,不是直接Run問題

    這篇文章主要介紹了Pycharm中運行程序在Python?console中執(zhí)行,不是直接Run問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python面向?qū)ο蟮膬?nèi)置方法梳理講解

    Python面向?qū)ο蟮膬?nèi)置方法梳理講解

    面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用“類”和 “對象”來實現(xiàn),所以,面向?qū)ο缶幊唐鋵嵕褪菍?nbsp;“類”和“對象” 的使用,今天給大家介紹下python 面向?qū)ο箝_發(fā)及基本特征,感興趣的朋友一起看看吧
    2022-10-10
  • Python及Django框架生成二維碼的方法分析

    Python及Django框架生成二維碼的方法分析

    這篇文章主要介紹了Python及Django框架生成二維碼的方法,結合實例形式分析了Python及Django框架使用qrcode包實現(xiàn)二維碼生成功能的相關操作技巧,需要的朋友可以參考下
    2018-01-01
  • python 比較2張圖片的相似度的方法示例

    python 比較2張圖片的相似度的方法示例

    這篇文章主要介紹了python 比較2張圖片的相似度的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • python編譯安裝參數(shù)方式

    python編譯安裝參數(shù)方式

    這篇文章主要介紹了python編譯安裝參數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python中的Descriptor描述符學習教程

    Python中的Descriptor描述符學習教程

    簡單來說,數(shù)據(jù)描述符是指實現(xiàn)了__get__、__set__、__del__方法的類屬性,等效于定義了三個方法的接口,下面就來詳細看一下Python中的Descriptor修飾符學習教程
    2016-06-06
  • python操作MySQL數(shù)據(jù)庫的方法分享

    python操作MySQL數(shù)據(jù)庫的方法分享

    堅持每天學一點,每天積累一點點,作為自己每天的業(yè)余收獲,這個文章是我在吃飯的期間寫的,利用自己零散的時間學了一下python操作MYSQL,所以整理一下
    2012-05-05
  • 一看就懂得Python的math模塊

    一看就懂得Python的math模塊

    今天小編就為大家分享一篇關于Python的math模塊,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • python多線程多并發(fā)啟動appium服務的實現(xiàn)

    python多線程多并發(fā)啟動appium服務的實現(xiàn)

    使用Dos命令或者bat批處理來手動啟動appium服務,啟動效率低下,本文主要介紹了python多線程多并發(fā)啟動appium服務的實現(xiàn),具有一定的 參考價值,感興趣的可以了解一下
    2024-02-02
  • python神經(jīng)網(wǎng)絡AlexNet分類模型訓練貓狗數(shù)據(jù)集

    python神經(jīng)網(wǎng)絡AlexNet分類模型訓練貓狗數(shù)據(jù)集

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡AlexNet分類模型訓練貓狗數(shù)據(jù)集,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05

最新評論

全南县| 岳普湖县| SHOW| 白水县| 闽清县| 稷山县| 江孜县| 剑河县| 肇州县| 西昌市| 凌源市| 石阡县| 禄劝| 大化| 大宁县| 开江县| 白山市| 天峨县| 麟游县| 佳木斯市| 安阳市| 西贡区| 安泽县| 义乌市| 大竹县| 友谊县| 梁河县| 普定县| 霍林郭勒市| 松溪县| 孝感市| 东辽县| 合川市| 崇州市| 平安县| 新疆| 海阳市| 宁武县| 曲阜市| 县级市| 富源县|