2016-11-29 81 views
-1

當我試圖通過一個lxml教程時,我忍不住想知道爲什麼當我使用print命令時,屏幕上的輸出仍然希望將所有內容放在一行上,即使使用pretty_print = True也是如此。爲什麼Python 3.4.3使用lxml不能正確輸出print語句?

所以說我剛剛安裝了Python 3.4.3 64位,並安裝Python後安裝lxml-3.4.0.win32-py3.4.exe。

然後,在空閒或在python.exe命令提示符,我做到以下幾點:

from lxml import etree 
root = etree.XML('<root><a><b/></a></root>') 
print(etree.tostring(root, pretty_print=True)) 

什麼期望我(和教程)是下面的輸出到屏幕上:

<root> 
    <a> 
    <b/> 
    </a> 
</root> 

但我在空閒的實際看到和蟒蛇cmd在Windows 7的提示是這樣的:

b'<root>\n <a>\n <b/>\n </a>\n</root>\n' 

那麼,爲什麼口譯員是這樣做的嗎?有沒有辦法在單行模式和更正常的標準輸出之間切換?也許更重要的是,如果我想將這個XML寫入一個文件,那麼帶lxml的Python會堅持把\ n和其他所有東西放在一行上,而不是按照它應該的方式打印出來嗎?

感謝, 約翰尼

+0

嘗試打印在控制檯,你會看到它的工作原理。你看到的是換行符的表示,而不是換行符本身...... –

+0

在Python 3.4.3控制檯和IDLE中都試過了。只有當我將編碼='unicode'作爲參數放在tostring中時,下面回答的人建議它工作。 – Johnny

回答

0

你看到的是字節字符串的代表性。您可以直接寫字節文件:

with open("file.xml", "wb") as output: 
    output.write(etree.tostring(root, pretty_print=True)) 

print期待一個unicode字符串,所以你必須編碼爲Unicode:

print(etree.tostring(root, pretty_print=True, encoding='unicode')) 
+0

是的,試過這個,它的工作原理。有趣的是,他們沒有在http://lxml.de/tutorial.html的lxml教程中提到這一點。是否因爲一些口譯員默認爲unicode?還是由教程作者疏忽? – Johnny

相關問題