2012-11-08 32 views
1

我有一些像這樣的元素的XML文件:與Python解析XML文件並獲得每一個列表元素字母「U」

<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'] 

'u'是怎麼回事?
是否有任何想法如何解決這個問題? 感謝您的幫助。

回答

5

u開頭的字符串是unicode string literals。由於XML包含unicode數據,因此XML解析器會以正確的類型返回數據,這是python unicode() type

你不需要刪除它們,你沒有問題。您可能需要閱讀Python Unicode HOWTO中的Unicode和Python,但這裏沒有問題。

由於這些是數字,因此可以將unicode值直接轉換爲浮點實例。

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是浮動的列表。

+0

OP *是*使用minidom(因此是XML解析器),並且只使用元素文本的正則表達式。 lxml和ElementTree都會返回unicode值。 –

+0

@MartijnPieters:哦,好的,謝謝。我錯過了。 – unutbu

+1

你的新例子是*也*返回一個unicode字符串,但使用'print'掩碼。除去'print'語句,它會顯示'u'[']字符串(當然是在Python 2.x中)。 –

相關問題