所以我正在运行以XML格式输出的第三方程序....这是我感兴趣的XML部分:
<something>
<process>
<iteration number="0" value="186.88" delta="0.5" nu="0.5" rho="0.125" x="0.4375" max_f_grad="45.192" max_greyness_grad="0"/>
<iteration number="1" value ="125.89" delta ="0.44955" nu ="0.46812" rho ="0.1217" x="0.39894" max_f_grad="4.5908" max_greyness_grad="0"/>
<iteration number="2" value ="90.528" delta ="0.22576" nu ="0.48615" rho ="0.15828" x="0.44465" max_f_grad="2.8968" max_greyness_grad="0"/>
<iteration number="3" value ="75.885" delta ="0.22523" nu ="0.49176" rho ="0.19133" x="0.44226" max_f_grad="2.8594" max_greyness_grad="0"/>
<iteration number="4" value ="68.869" delta ="0.21915" nu ="0.49569" rho ="0.21463" x="0.43686" max_f_grad="2.8433" max_greyness_grad="0"/>
<iteration number="5" value ="64.864" delta ="0.2238" nu ="0.49721" rho ="0.22948" x ="0.43071" max_f_grad="2.8375" max_greyness_grad="0"/>
...........
............
</process>
<something>
现在我得到&#34;迭代次数&#34;的值在我的python脚本中的变量中说it=200
并想要找到相应的delta和value ....我如何在python
中做到这一点我是初学者。
答案 0 :(得分:0)
如果您使用的是xml.elementtree.Etree,则可以使用以下代码获取任何value
或delta
属性的值:
values_list = []
deltas_list = []
for iteration in root.findall(".//process/iteration"):
values_list.add(iteration.attrib["value"])
deltas_list.add(iteration.attrib["delta"])
如果您确实想对从value
和delta
属性中获取的值执行某些操作,只需将print
语句切换为将这些值分配给在迭代之外仍然存在的对象。
这将遍历根元素<process>
中的所有<something>
元素,并在其中迭代每个<iteration>
元素中包含的所有<process>
元素。
编辑:如果我误解了您的问题,您想要的是仅保存 值元素中value
和delta
属性的值属性number
的属性为200
:
values = []
deltas = []
for two_hundred_iteration in root.findall(".//process/iteration[@number='200']"):
values.append(two_hundred_iteration.attrib["value"])
deltas.append(two_hundred_iteration.attrib["delta"])
请注意,此语法仅适用于ElementTree 1.3或更高版本,因此如果您使用的是Python 2.7或更低版本,则它将不适用于您。
答案 1 :(得分:0)
如何打印&#34;值&#34;对于具有数字=&#34; 200&#34;的迭代元素使用ElementTree:
for process in root.findall("process"):
for iteration in process.findall("iteration"):
if int(iteration["number"]) == 200:
print iteration["value"]
请注意,ElementTree会将XML加载到内存中,因此对于非常大(〜千兆字节+)的文件来说它并不理想。
答案 2 :(得分:-1)
我建议你xmltodict
>>> doc = xmltodict.parse("""
... <something>
... <process>
... <iteration number="0" value="186.88" delta="0.5" nu="0.5" rho="0.125" x="0.4375" max_f_grad="45.192" max_greyness_grad="0"/>
... <iteration number="1" value ="125.89" delta ="0.44955" nu ="0.46812" rho ="0.1217" x="0.39894" max_f_grad="4.5908" max_greyness_grad="0"/>
... <iteration number="2" value ="90.528" delta ="0.22576" nu ="0.48615" rho ="0.15828" x="0.44465" max_f_grad="2.8968" max_greyness_grad="0"/>
... </process>
... <something>
... """)
>>> doc["something"]["process"]["iteration"]
... [OrderedDict([(u'@max_f_grad', u'45.192'), (u'@number', u'0'), (u'@value', u'186.88'), (u'@max_greyness_grad', u'0'), (u'@rho', u'0.125'), (u'@delta', u'0.5'), (u'@x', u'0.4375'), (u'@nu', u'0.5')]), OrderedDict([(u'@max_f_grad', u'4.5908'), (u'@number', u'1'), (u'@value', u'125.89'), (u'@max_greyness_grad', u'0'), (u'@rho', u'0.1217'), (u'@delta', u'0.44955'), (u'@x', u'0.39894'), (u'@nu', u'0.46812')]), OrderedDict([(u'@max_f_grad', u'2.8968'), (u'@number', u'2'), (u'@value', u'90.528'), (u'@max_greyness_grad', u'0'), (u'@rho', u'0.15828'), (u'@delta', u'0.22576'), (u'@x', u'0.44465'), (u'@nu', u'0.48615')])]
使用这些数据,你可以看起来更好。