为什么Python 3.4.3使用lxml不能正确输出print语句?

时间:2016-11-29 21:32:32

标签: python lxml pretty-print

虽然我正在尝试运行lxml教程,但我无法理解为什么当我使用print命令时,屏幕输出仍然希望将所有内容放在一行上,即使是使用pretty_print =真。

所以说我在安装Python之后安装了Python 3.4.3 64位并安装了lxml-3.4.0.win32-py3.4.exe。

然后,在IDLE或python.exe cmd提示符下,我执行以下操作:

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

我(和教程)所期望的是以下输出到屏幕:

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

但是我在IDLE和Windows 7中的python cmd提示符中实际看到的是:

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

为什么口译员这样做呢?有没有办法在单线模式和更正常的标准输出之间切换?也许更重要的是,如果我想将这个XML写入文件,那么带有lxml的Python是否会坚持将\ n和其他所有内容放在一行而不是按照它应该的方式进行漂亮打印? / p>

谢谢, 约翰尼

1 个答案:

答案 0 :(得分:2)

您看到的是字节字符串的表示形式。您可以将字节直接写入文件:

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