【问题标题】:XML to csv(-like) formatXML 到 csv(-like) 格式
【发布时间】:2012-11-14 20:07:42
【问题描述】:

我有一个 XML 文件,我想将其转换/导出为 csv(-like) 格式。

例子:

<root>
  <child>
    <Name>John</Name>
    <Surname>Doe</Surname>
    <Name>George</Name>
    <Surname>Washington</Surname>
  </child>
</root>

ATM 我这样做(打印是为了调试,还没有完成):

#!/bin/python env

import xml.etree.ElementTree as etree

tree = etree.parse('./foobar.xml')
root = tree.getroot()

elements = ('Name', 'Surname')

for i in elements:
  for i in root.iter(i):
    print(i.text)

电流输出:

John
George
Doe
Washington

我想要得到的结果:

John, Doe
George, Washington

谁能帮帮我?

非常感谢。

【问题讨论】:

  • 你的意思是“Doe”和“Goerge”之间有一个逗号吗?

标签: python xml csv


【解决方案1】:

使用 xpath 和 zip()。

#!python

import xml.etree.ElementTree as etree

root = etree.parse('./foobar.xml').getroot()

for a in zip(root.findall("child/Name"), root.findall("child/Surname")):
    print(", ".join([x.text for x in a]))

如果你想用元素的名字来调用灵活。

#!python

import xml.etree.ElementTree as etree

child = etree.parse('./foobar.xml').getroot().find('child')

elements = ('Name', 'Surname')

for a in zip(*[child.findall(x) for x in elements]):
  print(", ".join([x.text for x in a]))

【讨论】:

  • 当我写入 csv 时,它会将所有内容附加到一行中。示例:csv.write(",\n ".join([x.text for x in a]))
猜你喜欢
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多