【发布时间】:2015-08-21 10:47:28
【问题描述】:
我正在使用 ElementTree 读取 .xml 文件并将输出保存到 .csv 文件。我遍历 xml 文件中的所有行并将名称和文本对保存在一个列表中。
savedParameters = []
tree = ET.parse(work_dir + input_name)
root = tree.getroot()
for child in root:
savedParameters.append({'parameterName' : child.tag, 'Value' : child.text})
for gchild in child:
savedParameters.append({'parameterName' : gchild.tag, 'Value' : gchild.text})
for ggchild in gchild:
.
.
.
然后我遍历 savedParameters 并将它们写入 csv 文件。除了在一种情况下,这一切都很好,以下面的 xml 为例。
<VehicleId>123456789</VehicleId>
-<VRMs>
<ForAppointment>X111XXX</ForAppointment>
<Alternate>X111XXX</Alternate>
</VRMs>
<Vin>123456</Vin>
在这种情况下,除了字段之外,所有内容都将按预期存储。该字段应该为空,但是当我访问 child.text() 时,它会存储一个带有新行的空白字符串,即-<VRMs> 和</VRMs> 之间的所有空格。因此,当我写出 csv 时,它会写出新行。
我尝试过replace(" ", "") 和replace("\n",""),但都没有解决我的问题。有谁知道解决这个问题的方法吗?
【问题讨论】:
-
@ScottHunter,不,代码不是问题。我解释说 child.text 提取了所有文本,包括“新行”,并且我正在努力删除它。我想知道是否有不同的方式来阅读文本或操作字符串。
-
检查这个:docs.python.org/3/library/xml.etree.elementtree.html。你的 XML 文件看起来像吗?相同的模式?
-
@SDilmac,是的,函数 .text 将从
1 中提取值 1。只有当 rank(在此示例中)没有文本但确实有一些子项时,.text 才会返回带有明显新行的字符串。 -
VRM标签的字符串是什么样子的,您可以为该标签做print(repr(child.text))并告诉我们吗? -
使用
child.text.strip()保存文本不起作用吗?
标签: python xml csv python-3.x elementtree