我有一个包含以下元素的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']
“你”发生了什么事?
有什么想法如何解决这个问题?
谢谢你的帮助。
答案 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
表示text
是unicode
个对象,而不是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
是浮动列表。