gpt4 book ai didi

python - 需要帮助来解析 XML 文件

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:40 26 4
gpt4 key购买 nike

我正在尝试解析 XML 文件,但我被某些事情阻止了。

快速浏览一下我的 XML 文件:

<editrust>
<flux ref='ITFR2006' sens='IN'>
<intervalle ref='H10'>
<terminé>1</terminé>
<prisEnComtpe>1</prisEnComtpe>
</intervalle>
<intervalle ref='H60'>
<terminé>11</terminé>
<prisEnComtpe>11</prisEnComtpe>
</intervalle>
<intervalle ref='D1'>
<terminé>150</terminé>
<prisEnComtpe>150</prisEnComtpe>
</intervalle>
<intervalle ref='D2'>
<terminé>150</terminé>
<prisEnComtpe>150</prisEnComtpe>
</intervalle>
</flux>

<flux ref='ITFR2007_2021' sens='IN'>
<intervalle ref='H10'>
<terminé>2</terminé>
<prisEnComtpe>2</prisEnComtpe>
</intervalle>
<intervalle ref='H60'>
<terminé>181</terminé>
<prisEnComtpe>121</prisEnComtpe>
</intervalle>
<intervalle ref='D1'>
<terminé>600</terminé>
<prisEnComtpe>600</prisEnComtpe>
</intervalle>
<intervalle ref='D2'>
<terminé>600</terminé>
<prisEnComtpe>600</prisEnComtpe>
</intervalle>
</flux>
...

我想渲染类似字典列表的内容

{'ITFR2006': ['IN', 'H10', '1','1', 'H60', '11', '11', 'D1', '150', '150'],...

我做了一个脚本:

import xml.etree.ElementTree as etree
tree = etree.parse('fichier.xml')
root = tree.getroot()

flux = {}

def findText(node):

for child in node:

if child.attrib.get("ref"):

if "ITFR" in child.attrib.get("ref"):
itfr = child.attrib.get("ref")
flux[itfr] = []

print("\n-----------------\n")

print(child.attrib.get("ref"))

if child.attrib.get("sens"):
flux[itfr].append(child.attrib.get("sens"))
print(child.attrib.get("sens"))

if child.text.strip():

print(child.text.strip())

findText(child)


findText(root)

print(flux)

脚本有这样的渲染:

-----------------

ITFR2006
IN
H10
1
1
H60
11
11
D1
150
150
D2
150
150

-----------------

ITFR2007_2021
IN
H10
2
2
H60
181
121
D1
600
600
D2
600
600
....

因此,print(flux) 使得:

{'ITFR2006': ['IN'], 'ITFR2007_2021': ['IN'], 'ITFR2008': ['IN'], 'ITFR2011_2020': ['IN'], 'ITFR2012': ['OUT'], 'ITFR2013': ['OUT'], 'ITFR2014': ['OUT'], 'ITFR2017': ['OUT'], 'ITFR2018': ['OUT'], 'ITFR2019': ['OUT'], 'ITFR2023': ['OUT'], 'ITFR2024': ['OUT']}

我认为这是一个好的开始,但我无法用其他值(“H10”、“1”、“1”、“H60”等)填充我的列表

有什么想法可以完成我的工作吗?

谢谢

最佳答案

这是一种方法(使用 Python 3.6 测试):

import xml.etree.ElementTree as etree
import pprint

tree = etree.parse('fichier.xml')
fluxdict = {}

for flux in tree.findall("flux"):
# The key
key = flux.get("ref")
# Add first item to the list
val = [flux.get("sens")]

for intervalle in flux.findall("intervalle"):
ref = intervalle.get("ref")
termine = intervalle.findtext("terminé")
prisEnComtpe = intervalle.findtext("prisEnComtpe")

# Add items by extending list
val.extend([ref, termine, prisEnComtpe])

# Add key:val pair for this 'flux'
fluxdict[key] = val

pprint.pprint(fluxdict)

输出:

{'ITFR2006': ['IN',
'H10',
'1',
'1',
'H60',
'11',
'11',
'D1',
'150',
'150',
'D2',
'150',
'150'],
'ITFR2007_2021': ['IN',
'H10',
'2',
'2',
'H60',
'181',
'121',
'D1',
'600',
'600',
'D2',
'600',
'600']}

关于python - 需要帮助来解析 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46806763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com