我有一个带有多个节点的xml文件,每个节点都有不同的数据。我的目标是创建一个包含值的元组的列表,其中每个值都包含该信息,但努力做到这一点。
<node id="950073331">
<data key="d4">39.22685</data>
<data key="d5">-4.58879</data>
<data key="d6">950073331</data>
</node>
<node id="950073335">
<data key="d4">39.22708</data>
<data key="d5">-4.58489</data>
<data key="d6">950073335</data>
</node>
这是我的代码,但是它为每个数据打印一个相同节点的元组,而不是在切换到下一个节点之前将所有数据添加到相同的元组中。
nodes = []
for node in root.findall('n:graph/n:node',ns):
id = node.get('id')
for data in node:
if (data.get('key')) != 'd6':
coordinates = data.text
nodes.append((id,coordinates))
print(nodes)
输出
nodes = [('950073331', '39.22685'), ('950073331', '4.58879'),
('950073335', '39.22708'), ('950073335', '4.58489') ... ]
我想要的输出:
nodes = [('950073331', '39.22685', '4.58879'),
('950073335', '39.22708', '4.58489') ... ]
PS:抱歉,python和xml :/
中的一个菜鸟很简单
答案 0 :(得分:2)
您要创建一个tuple
,其中包含每个节点的所有数据。但是,您需要为节点内的每个数据点创建一个。您可以例如:
nodes = []
for node in root.findall('n:graph/n:node',ns):
data_lst = [node.get('id')]
for data in node:
if data.get('key') != 'd6':
data_lst.append(data.text)
nodes.append(tuple(data_lst))
print(nodes)
或者在Python3中,您可以做得更短:
nodes = []
for node in root.findall('n:graph/n:node',ns):
id = node.get('id')
nodes.append((id, *(data.text for data in node if data.get('key') != 'd6')))
print(nodes)