使用Python解析XML文件并在每个列表元素中获得字母“u”

时间:2012-11-08 16:04:58

标签: python xml regex list parsing

我有一个包含以下元素的XML文件:

<RMS>[14.470156174, 14.470156174, 14.485567944, 14.496014765]</RMS> 

我想获得一个包含所有元素的列表

所以我用以下代码尝试了一些正则表达式:

      string = dom.getElementsByTagName('RMS')[0].toxml()
      string2 = re.findall("[\-]*[0-9]*\.[0-9]*", string)

现在,当我想打印列表时,它看起来像这样:

      [u'14.470156174', u'14.470156174', u'14.485567944', u'14.496014765']

“你”发生了什么事?
有什么想法如何解决这个问题? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:5)

u开头的字符串为unicode string literals。由于XML包含unicode数据,因此XML解析器以正确的类型返回您的数据,即python unicode() type

您不需要删除它们,也没有问题。您可能希望在Python Unicode HOWTO中阅读Unicode和Python,但这里没有问题。

由于这些是数字,您可以将unicode值直接转换为float实例。

答案 1 :(得分:0)

这里没有必要使用正则表达式。事实上,你的正则表达式可能不适用于某些浮点数,例如1.4e1

由于您使用minidom,您可以这样做:

import xml.dom.minidom as minidom
import ast

content = "<RMS>[14.470156174, 14.470156174, 14.485567944, 14.496014765]</RMS> "
dom = minidom.parseString(content)
text = dom.getElementsByTagName('RMS')[0].childNodes[0].wholeText

如果你

print(text)

你得到了

[14.470156174, 14.470156174, 14.485567944, 14.496014765]

但如果你

print(repr(text))

你得到了

u'[14.470156174, 14.470156174, 14.485567944, 14.496014765]'

u表示textunicode个对象,而不是str个对象。同样,您的代码会生成unicode个对象的列表。当您打印列表时,Python会打印列表中每个元素的repr。这就是你看到

的原因
[u'14.470156174', u'14.470156174', u'14.485567944', u'14.496014765']

现在,在重新阅读您的问题时,我发现您需要text中的元素列表。由于它们是数字,我假设您需要一个浮点列表。在这种情况下,您可以使用ast.literal_eval

values = ast.literal_eval(text)
print(values)

产量

[14.470156174, 14.470156174, 14.485567944, 14.496014765]

其中values是浮动列表。