2016-11-29 1 views
-1

Pendant que j'essayais de lancer un tutoriel lxml, je ne pouvais pas m'empêcher de me demander pourquoi quand j'utilise la commande print, la sortie à l'écran continue de vouloir tout mettre sur une ligne même avec pretty_print = True. Par exemple, je viens d'installer Python 3.4.3 64 bits et j'ai installé lxml-3.4.0.win32-py3.4.exe après l'installation de Python.Pourquoi Python 3.4.3 utilisant lxml ne génère-t-il pas une instruction d'impression correctement?

Puis, en IDLE ou au python.exe cmd invite, je fais ce qui suit:

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

Ce que je (et le tutoriel) attendu a été la sortie suivante à l'écran:

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

Mais ce que je vois en fait dans les deux IDLE et le python cmd rapide en Windows 7 est la suivante:

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

Alors, pourquoi faire L'interprète fait-il cela? Est-il possible de basculer entre le mode ligne unique et la sortie standard plus normale? Et peut-être plus important encore, si je veux écrire ce fichier XML dans un fichier, Python avec le lxml insistera-t-il pour mettre le \ n et tout le reste sur une ligne au lieu de l'imprimer comme prévu?

Merci, Johnny

+0

essayer d'imprimer dans une console, vous verrez cela fonctionne . Vous voyez la représentation des sauts de ligne, pas les sauts de ligne eux-mêmes ... –

+0

J'ai essayé cela dans la console Python 3.4.3 et dans IDLE. C'est seulement quand je mets l'encodage = 'unicode' comme argument dans tostring car la personne qui a répondu ci-dessous a suggéré que ça marche. – Johnny

Répondre

0

Ce que vous voyez est la représentation de la chaîne d'octets. Vous pouvez écrire octets directement dans un fichier:

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

print attend une chaîne unicode, donc vous devez encoder unicode:

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

Oui, j'ai essayé ça et ça marche. Drôle, ils ne l'ont pas mentionné dans le tutoriel pour lxml sur http://lxml.de/tutorial.html. Est-ce parce que certains interprètes utilisent unicode? Ou est-ce un oubli par les auteurs du tutoriel? – Johnny