查找XML数据并将其转换为CSV

2024-04-20 04:44:08 发布

您现在位置:Python中文网/ 问答频道 /正文

只是需要一些快速的帮助。假设我有如下xml格式:

<Solution version="1.0">
   <DrillHoles total_holes="238">
     <description>
       <hole hole_id="1">
         <hole collar="5720.44, 3070.94, 2642.19" />
         <hole toe="5797.82, 3061.01, 2576.29" />
         <hole cost="102.12" />
       </hole>
    ........

编辑:这是我用来创建孔领的代码…等等

^{pr2}$

等等,我如何获得孔领、孔趾和孔成本数据。这是我到目前为止的代码,我想我真的很接近。在

^{3}$

虽然我的程序生成了一个csv文件,但csv文件是空的,这就是为什么我认为这段代码由于一些搜索和查找错误而无法获取数据。有人能帮忙吗?在


Tags: 文件csv代码idversion格式descriptionxml
1条回答
网友
1楼 · 发布于 2024-04-20 04:44:08

你没说,但我想你是在用xml.etree.ElementTree. 这里有几个问题:

1)XML区分大小写。”“钻孔”和“钻孔”不是一回事。在

2)路径缺少XML中的“description”元素。在

3)引用属性时,不使用空格,而是使用另一个前缀为“@”的路径元素,如“hole/@cleal”。在

考虑到这些因素,答案应该是:

 for a in zip(root.findall("DrillHoles/description/hole/hole/@collar"),
              root.findall("DrillHoles/description/hole/hole/@toe"),
              root.findall("DrillHoles/description/hole/hole/@cost")):
   writer.writerow([x.text for x in a])

但事实并非如此。测试这一点,findall似乎真的不喜欢返回属性节点,可能是因为etree的API中不存在这样的属性节点。所以你可以这样做:

^{pr2}$

但是,如果您无论如何都要在for循环中列出语句中的属性,就个人而言,我只需要去掉zip并执行以下操作:

for a in root.findall("DrillHoles/description/hole"):
  writer.writerow([a.find("hole[@"+attr+"]").get(attr) for attr in ("collar", "toe", "cost")])

相关问题 更多 >