从XML文件创建多个Python字典

我有一个看起来像这样的XML文件:

<DATA>
    <DATA_VALUES>
        <SPEC>
            <Meta>1</Meta>
            <Data>100.430000</Data>
            <Intensity>2950.909708</Intensity>
            <Data>102.269997</Data>
            <Intensity>114341.550674</Intensity>
            <Data>103.260002</Data>
            <Intensity>47164.957890</Intensity>
            <Data>104.260002</Data>
            <Intensity>5102.098056</Intensity>
        </SPEC>
        <SPEC>
            <Peak>1</Peak>
            <Data>100.430000</Data>
            <Intensity>2950.909708</Intensity>
            <Data>102.269997</Data>
            <Intensity>114341.550674</Intensity>
            <Data>103.260002</Data>
            <Intensity>47164.957890</Intensity>
            <Data>104.260002</Data>
            <Intensity>5102.098056</Intensity>
        </SPEC>

实际上还有很多部分,我想为每个部分生成一个词典,以数据为键,强度为值。

我解析XML文件如下:

import xml.etree.ElementTree as ET

tree = ET.parse('File')
root = tree.getroot()

Data_Lst = []
Intensity_Lst = []
count = 0

for Data in root.iter('Data'):
    Data_Lst.append(Data.text)

for Intensity in root.iter('Intensity'):
    Intensity_Lst.append(Intensity.text)
    count += 1
    if count == len(Data_Lst):
       break

print(Data_Lst,Intensity_Lst)

我添加了计数,因为强度列表比数据列表更长。

有什么想法可以为每个部分生成字典吗?

ms11042116 回答:从XML文件创建多个Python字典

不要分别遍历DataIntensity节点。如果它们不匹配(您说他们不匹配),您将很快失去同步。

相反,在SPEC节点上进行迭代,然后搜索相对的DataIntensity节点。还要注意,我正在使用zip,因此如果SPEC节点内部不匹配,当我们使用较短的列表时,将停止dict的创建。

tree = ET.parse('File')
root = tree.getroot()

for spec_node in root.iter('SPEC'):
    d = dict(zip((data_node.text for data_node in spec_node.iter('Data')),(intensity_node.text for intensity_node in spec_node.iter('Intensity'))))
    print(d)

对于上述文件,输出

{'100.430000': '2950.909708','102.269997': '114341.550674','103.260002': '47164.957890','104.260002': '5102.098056'}
{'100.430000': '2950.909708','104.260002': '5102.098056'}

请注意,.text返回字符串。如果需要浮点数,请在适当的地方使用float(node.text)

例如,如果不匹配:

<DATA>
    <DATA_VALUES>
        <SPEC>
            <Meta>1</Meta>
            <Data>1</Data>
            <Intensity>2</Intensity>
            <Data>3</Data>
            <Intensity>4</Intensity>
            <Data>5</Data>
            <Intensity>6</Intensity>
            <Data>7</Data>
            <Intensity>8</Intensity>
            <Data>9</Data>   <!-- This will not be in the dict -->
        </SPEC>
    </DATA_VALUES>
</DATA>

创建的字典将是

{'1': '2','3': '4','5': '6','7': '8'}
本文链接:https://www.f2er.com/3158519.html

大家都在问