【问题标题】:Reading XML file leaving possible new lines读取 XML 文件留下可能的新行
【发布时间】: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() 时,它会存储一个带有新行的空白字符串,即-&lt;VRMs&gt;&lt;/VRMs&gt; 之间的所有空格。因此,当我写出 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


【解决方案1】:

您应该能够使用str.strip()(不提供任何参数)去除换行符(从字符串的开头和结尾)。

例子-

>>> s = "\n    \n asd \n    \n \n \n\n    "
>>> s.strip()
'asd'
>>> s = "\n    \n \n    \n \n \n\n    "
>>> s.strip()
''

如上所示,str.strip() 将返回空字符串,如果该字符串仅包含空格,您的 child.text 似乎就是这种情况。因此,在尝试将其存储在字典中之前,您应该能够做到 - child.text.strip()。示例 -

for child in root:
    savedParameters.append({'parameterName' : child.tag, 'Value' : child.text.strip()})
    for gchild in child:
        savedParameters.append({'parameterName' : gchild.tag, 'Value' : gchild.text.strip()})
        for ggchild in gchild:
        .
        .
        .

【讨论】:

  • 这非常有效。如果 .text 返回 None 值,那么对于遇到类似问题的其他人,strip() 的注释将不起作用。为了解决这个问题,我简单地使用了 if child.text is not None:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 2012-03-23
  • 2020-02-27
相关资源
最近更新 更多