gpt4 book ai didi

python-3.x - 如何使用 python 从 XML 创建嵌套字典?

转载 作者:行者123 更新时间:2023-12-03 01:22:21 26 4
gpt4 key购买 nike

我正在读取一个 XML 文件并取出其中的一部分并将其写入 YAML 文件。例如,在此 xml 文件中,

<project>


<scm class="hudson.scm.NullSCM"/>
<assignedNode>python</assignedNode>
<canRoam>false</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers>
<hudson.triggers.TimerTrigger>
<spec>H * * * *</spec>
</hudson.triggers.TimerTrigger>
</triggers>
<concurrentBuild>false</concurrentBuild>
<builders>

我只想读取禁用值和规范值并将其写入 YAML 文件,如下所示:预期输出:

disabled: 'false'
name: Cancellation_CMT_Tickets
triggers:
hudson.triggers.TimerTrigger:
spec: H * * * *

仅当我的结果字典采用这种格式时

d = {"trigger":{"hudson.triggers.TimerTrigger": {"spec": "H * * * *"}}}

我可以使用上述格式将其转储到 yaml 文件中。我当前的代码如下所示,搜索键作为运行时参数传递

import os, xml.etree.ElementTree as ET
import yaml,sys
tree = ET.parse('test.xml')
root = tree.getroot()

d = {}
def xmpparse(root,searchkey):
for child in root:
if child.tag == searchkey:
d[child.tag]=child.text
elif len(child):
xmpparse(child,searchkey)
for i in sys.argv:
xmpparse(root,i)

print(yaml.dump(d, default_flow_style=False))

当前输出:

disabled: 'false'
spec: H * * * *

任何帮助将不胜感激。提前致谢!

最佳答案

我相信这至少应该解决嵌套字典问题;它基于关于如何形成嵌套字典的各种答案(可能还有其他方法):

    import lxml.html as LH

class NestedDict(dict):
def __missing__(self, key):
self[key] = NestedDict()
return self[key]

data = [your xml above]

doc = LH.fromstring(data)

for i in doc:
if i.tag == 'triggers':
for child in i.getchildren():
d = NestedDict()
d[i.tag][child.tag][child[0].tag] = i.text_content().strip()

print(d)

输出:

{'triggers': {'hudson.triggers.timertrigger': {'spec': 'H * * * *'}}}

关于python-3.x - 如何使用 python 从 XML 创建嵌套字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57125922/

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