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

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

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

xmltodict簡介

概念

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

xmltodict按照

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

pip install xmltodict

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

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

參數(shù)含義如下:

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

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

# 將字典轉(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>中國</state>
# 		</address>
# 	</person>
# 	<person>
# 		<name>李四</name>
# 		<age>20</age>
# 		<gender>女</gender>
# 		<address>
# 			<street>藍靛廠路</street>
# 			<district>海淀區(qū)</district>
# 			<city>北京</city>
# 			<state>中國</state>
# 		</address>
# 	</person>
# </persons>

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

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

參數(shù)含義如下:

  • xml_input:要解析的XML數(shù)據(jù)??梢允亲址蛭募ο?。
  • encoding(可選):XML文檔的編碼。默認為None,意味著使用XML文檔中指定的編碼。
  • expat(可選):自定義的XML解析器。默認使用Python標準庫中的xml.parsers.expat。
  • process_namespaces(可選):是否處理命名空間。默認為False。
  • namespace_separator(可選):當process_namespaces=True時,命名空間和標簽名之間的分隔符。默認為:。
  • postprocessor(可選):一個函數(shù),它會在每個元素解析完成后被調(diào)用。這允許用戶修改解析結(jié)果,例如,可以用來轉(zhuǎn)換數(shù)據(jù)類型或合并節(jié)點。它接收三個參數(shù):path、key和value。path是當前元素的父元素路徑,key是當前元素的標簽名,value是當前元素的值(可能是文本、屬性字典或子元素的字典)。
  • dict_constructor(可選):用于創(chuàng)建字典的構(gòu)造函數(shù)。默認情況下,xmltodict使用內(nèi)置的dict函數(shù)來構(gòu)造字典。如果你想使用其他類型的字典(例如,collections.OrderedDict以保持元素的順序),可以通過這個參數(shù)指定。
  • xml_attribs(可選):控制解析器是否應(yīng)該包含元素的屬性。默認為True,意味著元素的屬性會被包含在解析結(jié)果中。如果設(shè)置為False,則屬性將被忽略,只有元素的文本內(nèi)容和子元素會被包含。
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>中國</state>
        </address>
    </person>
    <person>
        <name>李四</name>
        <age>20</age>
        <gender>女</gender>
        <address>
            <street>藍靛廠路</street>
            <district>海淀區(qū)</district>
            <city>北京</city>
            <state>中國</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': '中國'}}, {'name': '李四', 'age': '20', 'gender': '女', 'address': {'street': '藍靛廠路', 'district': '海淀區(qū)', 'city': '北京', 'state': '中國'}}]}}

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

拓展

1.改變屬性前綴

attr_prefix參數(shù)用于指定XML屬性在轉(zhuǎ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)
# 使用默認的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ù)用于控制是否去除文本值中的空白字符。默認值是True。

import xmltodict

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

# strip_whitespace=True (默認)
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.去除空值標簽

利用postprocessor鉤子指定一個按照預(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>中國</state>
        </address>
    </person>
    <person>
        <name>李四</name>
        <age>20</age>
        <gender>女</gender>
        <address>
            <street></street>
            <district desc="test"></district>
            <city>北京</city>
            <state>中國</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': '中國'}
print(result2['persons']['person'][0]['address'])  # 輸出: {'district': {'@desc': 'test', '#text': '浦東新區(qū)'}, 'state': '中國'}

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

總結(jié)

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

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

相關(guān)文章

  • python3.x提取中文的正則表達式示例代碼

    python3.x提取中文的正則表達式示例代碼

    這篇文章主要介紹了python3.x中提取中文的正則表達式的書寫,需要的朋友可以參考下
    2019-07-07
  • Python編譯過程和執(zhí)行原理解析

    Python編譯過程和執(zhí)行原理解析

    這篇文章主要介紹了Python編譯過程和執(zhí)行原理解析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Python?并行加速技巧分享

    Python?并行加速技巧分享

    這篇文章主要介紹了Python?并行加速技巧分享,文章圍繞文章主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • python實現(xiàn)ip地址查詢經(jīng)緯度定位詳解

    python實現(xiàn)ip地址查詢經(jīng)緯度定位詳解

    這篇文章主要介紹了python實現(xiàn)ip地址查詢經(jīng)緯度定位詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • 詳解Python用戶登錄接口的方法

    詳解Python用戶登錄接口的方法

    這篇文章主要介紹了Python用戶登錄接口的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python的加密模塊之hashlib 與 base64詳解及常用加密方法

    Python的加密模塊之hashlib 與 base64詳解及常用加密方法

    我們來學(xué)習(xí)一下 Python 中的加密模塊,加密模塊在工作中被廣泛應(yīng)用,比如數(shù)據(jù)的傳入 不希望被捕獲,通過把數(shù)據(jù)加密。這樣即使被捕獲也無法獲取到數(shù)據(jù)的真實信息,今天我們就來學(xué)習(xí)一下關(guān)于加密的方法,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • Python如何用字典完成匹配任務(wù)

    Python如何用字典完成匹配任務(wù)

    在生物信息學(xué)領(lǐng)域,經(jīng)常需要根據(jù)基因名稱匹配其對應(yīng)的編號,本文介紹了一種通過字典進行基因名稱與編號匹配的方法,首先定義一個空列表存儲對應(yīng)編號,對于字典中不存在的基因名稱,其編號默認為0
    2024-09-09
  • 基于PyQt制作小紅書圖片抓取工具

    基于PyQt制作小紅書圖片抓取工具

    這篇文章主要為大家詳細介紹了如何基于PyQt制作一個小紅書圖片抓取工具,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • python3中超級好用的日志模塊-loguru模塊使用詳解

    python3中超級好用的日志模塊-loguru模塊使用詳解

    loguru默認的輸出格式是上面的內(nèi)容,有時間、級別、模塊名、行號以及日志信息,不需要手動創(chuàng)建?logger,直接使用即可,另外其輸出還是彩色的,看起來會更加友好,這篇文章主要介紹了python3中超級好用的日志模塊-loguru模塊使用詳解,需要的朋友可以參考下
    2022-11-11
  • python3 寫一個WAV音頻文件播放器的代碼

    python3 寫一個WAV音頻文件播放器的代碼

    本文通過實例代碼給大家介紹了python3 寫一個WAV音頻文件播放器,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09

最新評論