【发布时间】:2021-01-17 09:59:32
【问题描述】:
我有一个很大的.xml 文件,其中的一部分如下所示:
<?xml version="1.0"?>
<data>
<measData>
<Mesurment Id="55">
<granPeriod duration="1" endTime="2021-01-02"/>
<repPeriod duration="1"/>
<measTypes>73 74 574 75 35 36 </measTypes>
<measValue measObj="Group1">
<measResults>512 52.733 33.5 82 0 0 </measResults>
</measValue>
<measValue measObj="Group2">
<measResults>512 78.175 50 119.5 0 0 </measResults>
</measValue>
</Mesurment>
</measData>
</data>
我正在尝试从中解析出所需的数据并将其保存在 CSV 文件中。
我遇到的问题是,在 xml 文件中 <measTypes> 重复了一次,之后提到了 group1 和 Group2 的 <measTypes> 的值。
对于不同的<Mesurment Id>,它会有所不同,并且每个<measTypes> 报告的组值可能超过 10 个
问题出在这里,我不知道如何为一个measTypes 报告多个measResults
我有以下代码来获取值:
import xml.etree.ElementTree as ET
import pandas as pd
parsDict = dict()
tree = ET.parse('new.xml')
root = tree.getroot()
for itm in tree.iter():
if (itm.tag.split('}')[-1] == 'Mesurment'):
parsDict['Mesurment'] = [itm.attrib['Id']]
if (itm.tag.split('}')[-1] == 'granPeriod'):
parsDict['duration'] = [itm.attrib['duration']]
parsDict['endTime'] = [itm.attrib['endTime']]
if (itm.tag.split('}')[-1] == 'measTypes'):
parsDict['CounterID'] = [itm.text]
if (itm.tag.split('}')[-1] == 'measValue'):
parsDict['measObj'] = [itm.attrib['measObj']]
if (itm.tag.split('}')[-1] == 'measResults'):
parsDict['value'] = [itm.text]
df2 = pd.DataFrame(parsDict)
df2.to_csv('123.csv',index=False)
print('finish')
结果如下
报告最新组 我想要的结果如下所示,需要能够扩展到多个组和测量 ID
【问题讨论】:
标签: python xml pandas xml-parsing elementtree