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

Python利用xmltodict實(shí)現(xiàn)字典和xml互相轉(zhuǎn)換的示例代碼

 更新時(shí)間:2024年12月04日 10:10:51   作者:需要休息的KK.  
xmltodict是一個(gè)Python第三方庫(kù),用于處理XML數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

xmltodict簡(jiǎn)介

概念

  • xmltodict是Python中用于處理XML數(shù)據(jù)的模塊,它可將XML數(shù)據(jù)轉(zhuǎn)換為字典,簡(jiǎn)化XML解析過(guò)程,同時(shí)保留數(shù)據(jù)結(jié)構(gòu),便于操作。
  • 反之,也可將字典轉(zhuǎn)回XML格式。此模塊在處理XML時(shí)提供了直觀、簡(jiǎn)潔的接口;

xmltodict按照

xmltodict模塊屬于Python第三方庫(kù),需要額外下載安裝,命令如下:

pip install xmltodict

生成XML數(shù)據(jù)

unparser函數(shù)用于將Python字典轉(zhuǎn)換為XML數(shù)據(jù),便于數(shù)據(jù)的存儲(chǔ)和傳輸;

參數(shù)含義如下:

  • input_dict:要轉(zhuǎn)換為XML的Python字典。
  • output(可選):輸出的目標(biāo)。可以是字符串(默認(rèn))或文件對(duì)象。
  • pretty(可選):是否美化輸出。默認(rèn)為False。
  • full_document(可選):是否輸出完整的XML文檔,包括XML聲明。默認(rèn)為T(mén)rue。
import xmltodict

# Python 字典
data = {
    'persons':
        {
            'person':
                [
                    {
                        'name': '張三', 'age': '18', 'gender': '男',
                        'address': {'street': '浦東大道', 'district': '浦東新區(qū)', 'city': '上海', 'state': '中國(guó)'}
                    },
                    {
                        'name': '李四', 'age': '20', 'gender': '女',
                        'address': {'street': '藍(lán)靛廠路', 'district': '海淀區(qū)', 'city': '北京', 'state': '中國(guó)'}}
                ]
        }
}

# 將字典轉(zhuǎn)換為 XML 數(shù)據(jù)
xml_string = xmltodict.unparse(data, pretty=True)

# 打印 XML 數(shù)據(jù)
print(xml_string)
# <?xml version="1.0" encoding="utf-8"?>
# <persons>
# 	<person>
# 		<name>張三</name>
# 		<age>18</age>
# 		<gender>男</gender>
# 		<address>
# 			<street>浦東大道</street>
# 			<district>浦東新區(qū)</district>
# 			<city>上海</city>
# 			<state>中國(guó)</state>
# 		</address>
# 	</person>
# 	<person>
# 		<name>李四</name>
# 		<age>20</age>
# 		<gender>女</gender>
# 		<address>
# 			<street>藍(lán)靛廠路</street>
# 			<district>海淀區(qū)</district>
# 			<city>北京</city>
# 			<state>中國(guó)</state>
# 		</address>
# 	</person>
# </persons>

解析XML數(shù)據(jù)

parse函數(shù)將XML數(shù)據(jù)解析為Python字典,使得你可以使用Python的語(yǔ)法來(lái)訪問(wèn)和操作XML數(shù)據(jù)。

參數(shù)含義如下:

  • xml_input:要解析的XML數(shù)據(jù)??梢允亲址蛭募?duì)象。
  • encoding(可選):XML文檔的編碼。默認(rèn)為None,意味著使用XML文檔中指定的編碼。
  • expat(可選):自定義的XML解析器。默認(rèn)使用Python標(biāo)準(zhǔn)庫(kù)中的xml.parsers.expat。
  • process_namespaces(可選):是否處理命名空間。默認(rèn)為False。
  • namespace_separator(可選):當(dāng)process_namespaces=True時(shí),命名空間和標(biāo)簽名之間的分隔符。默認(rèn)為:。
  • postprocessor(可選):一個(gè)函數(shù),它會(huì)在每個(gè)元素解析完成后被調(diào)用。這允許用戶(hù)修改解析結(jié)果,例如,可以用來(lái)轉(zhuǎn)換數(shù)據(jù)類(lèi)型或合并節(jié)點(diǎn)。它接收三個(gè)參數(shù):path、key和value。path是當(dāng)前元素的父元素路徑,key是當(dāng)前元素的標(biāo)簽名,value是當(dāng)前元素的值(可能是文本、屬性字典或子元素的字典)。
  • dict_constructor(可選):用于創(chuàng)建字典的構(gòu)造函數(shù)。默認(rèn)情況下,xmltodict使用內(nèi)置的dict函數(shù)來(lái)構(gòu)造字典。如果你想使用其他類(lèi)型的字典(例如,collections.OrderedDict以保持元素的順序),可以通過(guò)這個(gè)參數(shù)指定。
  • xml_attribs(可選):控制解析器是否應(yīng)該包含元素的屬性。默認(rèn)為T(mén)rue,意味著元素的屬性會(huì)被包含在解析結(jié)果中。如果設(shè)置為False,則屬性將被忽略,只有元素的文本內(nèi)容和子元素會(huì)被包含。
import xmltodict

# XML 數(shù)據(jù)
xml_string = '''
<persons>
    <person>
        <name>張三</name>
        <age>18</age>
        <gender>男</gender>
        <address>
            <street>浦東大道</street>
            <district>浦東新區(qū)</district>
            <city>上海</city>
            <state>中國(guó)</state>
        </address>
    </person>
    <person>
        <name>李四</name>
        <age>20</age>
        <gender>女</gender>
        <address>
            <street>藍(lán)靛廠路</street>
            <district>海淀區(qū)</district>
            <city>北京</city>
            <state>中國(guó)</state>
        </address>
    </person>    
</persons>
'''

# 解析 XML 數(shù)據(jù)
data = xmltodict.parse(xml_string)
print(type(data), data) # <class 'dict'> {'persons': {'person': [{'name': '張三', 'age': '18', 'gender': '男', 'address': {'street': '浦東大道', 'district': '浦東新區(qū)', 'city': '上海', 'state': '中國(guó)'}}, {'name': '李四', 'age': '20', 'gender': '女', 'address': {'street': '藍(lán)靛廠路', 'district': '海淀區(qū)', 'city': '北京', 'state': '中國(guó)'}}]}}

# 訪問(wèn)數(shù)據(jù)
print(data['persons']['person'][0]['name'])  # 輸出: 張三
print(data['persons']['person'][1]['name'])  # 輸出: 李四

拓展

1.改變屬性前綴

attr_prefix參數(shù)用于指定XML屬性在轉(zhuǎn)換為字典時(shí)的鍵前綴。默認(rèn)值是’@'。

import xmltodict

xml_string = '''
<persons>
    <person name="zhangsan" age="18" gender="男">
        <address>上海市浦東新區(qū)</address>
    </person>
    <person name="lisi" age="20" gender="女">
        <address>北京市海淀區(qū)</address>
    </person>
</persons>
'''

#
data1 = xmltodict.parse(xml_string)
print(data1)
# 使用默認(rèn)的attr_prefix='@'參數(shù)值,輸出如下:
# {'persons':
#      {
#          'person': [
#              {'@name': 'zhangsan', '@age': '18', '@gender': '男', 'address': '上海市浦東新區(qū)'},
#              {'@name': 'lisi', '@age': '20', '@gender': '女', 'address': '北京市海淀區(qū)'}
#          ]
#      }
# }


data2 = xmltodict.parse(xml_string, attr_prefix='attr_')
print(data2)
# 使用自定義attr_prefix='attr_'參數(shù)值,輸出如下:
# {'persons':
#      {
#          'person': [
#              {'attr_name': 'zhangsan', 'attr_age': '18', 'attr_gender': '男', 'address': '上海市浦東新區(qū)'},
#              {'attr_name': 'lisi', 'attr_age': '20', 'attr_gender': '女', 'address': '北京市海淀區(qū)'}
#          ]
#      }
# }

2.去除文本值中的空白字符

strip_whitespace參數(shù)用于控制是否去除文本值中的空白字符。默認(rèn)值是True。

import xmltodict

xml_string = '''
<person name="zhangsan">
    <address>    上海市浦東新區(qū)</address>
</person>
'''

# strip_whitespace=True (默認(rèn))
data1 = xmltodict.parse(xml_string)
print(data1)    # {'person': {'@name': 'zhangsan', 'address': '上海市浦東新區(qū)'}}

# strip_whitespace=False
data2 = xmltodict.parse(xml_string, strip_whitespace=False)
print(data2)    # {'person': {'@name': 'zhangsan', 'address': '    上海市浦東新區(qū)', '#text': '\n    \n'}}

3.去除空值標(biāo)簽

利用postprocessor鉤子指定一個(gè)按照預(yù)想邏輯處理key、value值的函數(shù);

import xmltodict

xml_string = '''
<persons>
    <person>
        <name>張三</name>
        <age>18</age>
        <gender>男</gender>
        <address>
            <street></street>
            <district desc="test">浦東新區(qū)</district>
            <city></city>
            <state>中國(guó)</state>
        </address>
    </person>
    <person>
        <name>李四</name>
        <age>20</age>
        <gender>女</gender>
        <address>
            <street></street>
            <district desc="test"></district>
            <city>北京</city>
            <state>中國(guó)</state>
        </address>
    </person>    
</persons>
'''


def _remove_empty(_, key, value):
    if value is None:
        return
    return key, value


result1 = xmltodict.parse(xml_string)
result2 = xmltodict.parse(xml_string, postprocessor=_remove_empty)

print(result1['persons']['person'][0]['address'])  # 輸出: {'street': None, 'district': {'@desc': 'test', '#text': '浦東新區(qū)'}, 'city': None, 'state': '中國(guó)'}
print(result2['persons']['person'][0]['address'])  # 輸出: {'district': {'@desc': 'test', '#text': '浦東新區(qū)'}, 'state': '中國(guó)'}

print(result1['persons']['person'][1]['address'])  # 輸出: {'street': None, 'district': {'@desc': 'test'}, 'city': '北京', 'state': '中國(guó)'}
print(result2['persons']['person'][1]['address'])  # 輸出: {'district': {'@desc': 'test'}, 'city': '北京', 'state': '中國(guó)'}

總結(jié)

xmltodict模塊是處理XML數(shù)據(jù)的強(qiáng)大工具,它結(jié)合了XML的靈活性和Python字典的簡(jiǎn)便性
無(wú)論是需要解析復(fù)雜的XML文檔,還是需要生成結(jié)構(gòu)化的XML數(shù)據(jù),xmltodict都能簡(jiǎn)單而又直觀的勝任;
通過(guò)將XML處理過(guò)程與Python字典操作相結(jié)合,xmltodict極大地簡(jiǎn)化了XML數(shù)據(jù)的處理流程,使得開(kāi)發(fā)者可以更加專(zhuān)注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。

到此這篇關(guān)于Python利用xmltodict實(shí)現(xiàn)字典和xml互相轉(zhuǎn)換的示例代碼的文章就介紹到這了,更多相關(guān)Python 字典和xml互相轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)pdf文檔轉(zhuǎn)txt的方法示例

    Python實(shí)現(xiàn)pdf文檔轉(zhuǎn)txt的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)pdf文檔轉(zhuǎn)txt的方法,結(jié)合實(shí)例形式分析了Python基于第三方庫(kù)pdfminier實(shí)現(xiàn)針對(duì)pdf格式文檔的讀取、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • 詳解在Python程序中自定義異常的方法

    詳解在Python程序中自定義異常的方法

    這篇文章主要介紹了詳解在Python程序中自定義異常的方法,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • python ChainMap管理用法實(shí)例講解

    python ChainMap管理用法實(shí)例講解

    在本篇文章里小編給大家整理一篇關(guān)于python ChainMap的管理用法及相關(guān)實(shí)例,有需要的朋友們可以學(xué)參考下。
    2021-08-08
  • 詳解Django3中直接添加Websockets方式

    詳解Django3中直接添加Websockets方式

    這篇文章主要介紹了Django3中直接添加Websockets方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • pandas 小數(shù)位數(shù) 精度的處理方法

    pandas 小數(shù)位數(shù) 精度的處理方法

    今天小編就為大家分享一篇pandas 小數(shù)位數(shù) 精度的處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Linux下使用python自動(dòng)修改本機(jī)網(wǎng)關(guān)代碼分享

    Linux下使用python自動(dòng)修改本機(jī)網(wǎng)關(guān)代碼分享

    這篇文章主要介紹了Linux下使用python自動(dòng)修改本機(jī)網(wǎng)關(guān)代碼分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-05-05
  • django+celery如何實(shí)現(xiàn)定時(shí)拉取阿里云rocketmq實(shí)例信息

    django+celery如何實(shí)現(xiàn)定時(shí)拉取阿里云rocketmq實(shí)例信息

    這篇文章主要介紹了django+celery如何實(shí)現(xiàn)定時(shí)拉取阿里云rocketmq實(shí)例信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-07-07
  • Django中session登錄驗(yàn)證操作指南

    Django中session登錄驗(yàn)證操作指南

    本文介紹了如何使用Django中的session登錄驗(yàn)證來(lái)保護(hù)網(wǎng)站的安全性。在此過(guò)程中,我們首先介紹了Django的認(rèn)證架構(gòu)和基本概念,然后我們深入探討了如何使用session實(shí)現(xiàn)登錄驗(yàn)證功能。最后,我們解釋了如何創(chuàng)建一個(gè)Custom?User?Model,以及如何使用它來(lái)自定義用戶(hù)對(duì)象。
    2023-04-04
  • 使用python實(shí)現(xiàn)讀取文件夾中所有excel

    使用python實(shí)現(xiàn)讀取文件夾中所有excel

    相信很多坐在辦公室上班的朋友每天都需要處理大量的數(shù)據(jù),本文我們就來(lái)看看如何使用Openpyxl讀取文件夾下所有Excel文檔中的數(shù)據(jù),文中示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2025-12-12
  • 基于Python實(shí)現(xiàn)密碼生成與管理工具(進(jìn)階版)

    基于Python實(shí)現(xiàn)密碼生成與管理工具(進(jìn)階版)

    在現(xiàn)代數(shù)字生活中,密碼是保護(hù)個(gè)人信息和賬戶(hù)安全的第一道防線,本文將詳細(xì)介紹一個(gè)簡(jiǎn)單的密碼生成與管理工具的實(shí)現(xiàn)方式,希望對(duì)大家有所幫助
    2025-08-08

最新評(píng)論

若尔盖县| 保德县| 宿州市| 陵川县| 兴化市| 大丰市| 华宁县| 柏乡县| 高青县| 东兰县| 重庆市| 西和县| 奉贤区| 宝清县| 昌江| 麻栗坡县| 巧家县| 六枝特区| 昌都县| 贵州省| 吉水县| 济南市| 乌什县| 通渭县| 分宜县| 邳州市| 璧山县| 泗阳县| 左贡县| 山东| 耒阳市| 达尔| 西安市| 万年县| 清镇市| 彭阳县| 泸溪县| 车致| 泰和县| 揭阳市| 丘北县|