首页 > 编程笔记 > Python笔记 阅读:12

Python xmltodict包的用法(附带实例)

在网络运维自动化领域中,经常将 XML 数据转化为 Python 数据,以提高可读性。在 Python 程序中,可以使用 xmltodict 包,它可将 XML 数据和 Python 数据进行转换。

本文使用的 xmltodict 版本是 0.13,安装命令如下:
pip install xmltodict==0.13

XML数据转换为Python数据

xmltodict 的 parse() 函数可以将 XML 数据转换为 Python 数据,并将 XML 数据赋值给第一个参数 xml_input。

例如,使用 xmltodict 解析 XML 数据:
import xmltodict
import json
 
xml_text = """<?xml version="1.0" encoding="UTF-8"?>
<device>
    <name>netdevops01</name>
    <ip>192.168.137.1</ip>
    <vendor>华为</vendor>
    <online>true</online>
    <rack>0101</rack>
    <start_u>20</start_u>
    <end_u>21</end_u>
    <interface_usage>0.67</interface_usage>
    <interfaces>
        <interface>eth1/1</interface>
        <interface>eth1/2</interface>
        <interface>eth1/3</interface>
    </interfaces>
    <uptime>null</uptime>
</device>
"""
 
data = xmltodict.parse(xml_input=xml_text)
 
print(data)
运行结果如下:
{'device': {'name': 'netdevops01', 'ip': '192.168.137.1', 'vendor': '华为', 'online':
'true', 'rack': '0101', 'start_u': '20', 'end_u': '21', 'interface_usage': '0.67',
'interfaces': {'interface': ['eth1/1', 'eth1/2', 'eth1/3']}, 'uptime': 'null'}}

Python数据转换为XML数据

unparse() 函数可将 Python 数据转换为 XML 数据,其使用场景并不多,读者了解即可。使用时,将 unparse() 函数的第一个参数 input_dict 赋值为 Python 字典数据。

使用 xmltodict 将 Python 数据转换为 XML 数据,示例代码如下:
import xmltodict
 
python_data = {'device':{'name': 'netdevops01', 'ip': '192.168.137.1',
               'vendor': '华为', 'online': True, 'rack': '0101',
               'start_u': 20, 'end_u': 21, 'interface_usage': 0.67,
               'interfaces': ['eth1/1', 'eth1/2', 'eth1/3'],
               'uptime': None}}
 
# input_dict是要转换的Python数据
# output默认值为None,如果将其赋值为一个文件对象,就会将数据写入其中
xml_data = xmltodict.unparse(input_dict=python_data,output=None)
print(xml_data)
上述代码的运行结果如下:
<?xml version="1.0" encoding="utf-8"?>
<device><name>netdevops01</name><ip>192.168.137.1</ip><vendor>华为</vendor><online>true
</online><rack>0101</rack><start_u>20</start_u><end_u>21</end_u><interface_usage>0.67
</interface_usage><interfaces>eth1/1</interfaces><interfaces>eth1/2</interfaces><interfaces>
eth1/3</interfaces><uptime></uptime></device>

相关文章