首页 > 解决方案 > 将 XML 数组读取到 python dict

问题描述

我正在尝试从具有所示结构的 XML 数据文件中读取数组。通过使用如何在 Python 中解析 XML?我收到以下没有我的数组。

<event id="1" settings="183" digitizer="LoremID" timestamp="42">
 <triggershift samples="0"></triggershift>
 <trace channel="0">2 4 1 2 1 23 5 4 2 4 2 
 </trace>
</event>

输出:

{'id': '1', 
'settings': '183', 
'digitizer': 'LoremID', 
'timestamp': '42', 
'triggershift': {'samples': '0'}, 
'trace': {'channel': '0'}}

有人对如何读取设置和数组有想法吗?

提前致谢。

标签: pythonxml

解决方案


代码:

import xml.etree.ElementTree as ET

content = """<event id="1" settings="183" digitizer="LoremID" timestamp="42">
 <triggershift samples="0"></triggershift>
 <trace channel="0">2 4 1 2 1 23 5 4 2 4 2</trace>
</event>"""

root = ET.fromstring(content)
settings = {**root.attrib}
for el in root:
    settings[el.tag] = {**el.attrib}
    if el.text:
        array = el.text.split(" ")
        settings[el.tag]["value"] = array

输出:

{
    "id": "1",
    "settings": "183",
    "digitizer": "LoremID",
    "timestamp": "42",
    "triggershift": {
        "samples": "0"
    },
    "trace": {
        "channel": "0",
        "value": [
            "2",
            "4",
            "1",
            "2",
            "1",
            "23",
            "5",
            "4",
            "2",
            "4",
            "2"
        ]
    }
}

更新。

如果要将array元素转换为int,可以使用map()

settings[el.tag]["value"] = list(map(int, array))

推荐阅读