2016-11-29 14 views
-1

Пока я пытаюсь запустить учебник lxml, я не мог не задаться вопросом, почему, когда я использую команду print, вывод на экран продолжает собирать все на одной строке, даже с pretty_print = True.Почему Python 3.4.3 с использованием lxml не выводит корректную инструкцию печати?

Так сказать, я только что установил Python 3.4.3 64-bit и установил lxml-3.4.0.win32-py3.4.exe после установки Python.

Затем в 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 и питон CMD подскажет в Windows 7 заключается в следующем:

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

Так почему это делает переводчик? Есть ли способ переключиться между однострочным режимом и более нормальным стандартным выходом? И, возможно, что более важно, если я хочу записать этот XML в файл, будет ли Python с lxml настаивать на том, чтобы положить \ 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, поэтому вы должны кодировать Юникод:

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

Да, попробовал это, и он работает. Забавно, что они не упомянули об этом в учебнике по lxml по адресу http://lxml.de/tutorial.html. Это потому, что некоторые интерпретаторы по умолчанию используют unicode? Или это надзор со стороны авторов учебников? – Johnny