2016-11-29 89 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

相关问题