J'essaie de déménager à Python 2.7 et puisque Unicode est un gros problème là-bas, j'essaierais de traiter avec eux avec des fichiers et des textes XML et d'analyser à l'aide du La même chose se produit à l'aide de xml.etree.celementtree code> une bibliothèque. Mais j'ai couru sur cette erreur: io.open ('fichier.xml', encoding = 'utf-8') code> pour passer à ET.PARSE CODE>: P> >>> with io.open('test.xml', mode='rb') as fp:
... ET.parse(fp)
...
<ElementTree object at 0x0180BC10>
3 Réponses :
ne peut pas utiliser dans votre premier exemple? p> p>
Je n'ai pas réalisé que cette fonction existait. Point mineur Toutefois: Dutring code> renvoie un élément code>, tandis que parse code> renvoie un Elementtree code>.
Cette fonction est également appelée alias, xml code>, i.e. de xml.etree.celementtree importe xml code>. Cet alias est là pour qu'il soit bien lu si vous avez une constante XML dans votre code; Vous pouvez simplement faire FooDocument = XML ("" "..." "") code>.
Le module code> xml.etree.celementtre code> est obsolète depuis Python 3.3. Voir docs.python.org/3/Library/xml.etree.ElementTree .html
J'ai rencontré le même problème que vous dans Python 2.6.
Il semble que "UTF-8" codant pour Celementtree.Parse dans la version Python 2.x et 3.x est différente. Dans Python 2.x, nous pouvons utiliser XMLParser pour encoder l'Unicode. Par exemple: p> Vous pouvez vous reporter à cette page pour la méthode xmlParser (section "xmlParser"): http://effbot.org/zone/elementtree-13-intro.htm p> tandis que la méthode suivante fonctionne pour la version Python 3.x: < / p> espère que cela peut vous aider. p> p>
C'est une sorte de droite, mais les versions de l'élévateur sont plus similaires entre Python 2 et Python 3 que vous leur donnez crédit. Je vais écrire une réponse différente, je pense.
Votre problème est que vous nourrissez dans Python 2.x, il peut seulement em> consommer d'octets. Vous pouvez le dire ce qui codant pour ces octets, mais c'est tout. Donc, si vous devez littéralement travailler avec un objet qui représente un em> fichier texte em>, comme Si vous commencez littéralement avec un 2.x- Si vous souhaitez une interface pouvant traiter des données incrémentalement lues à partir d'un fichier, utilisez in Python 3.x, vous peut em> passer unicode directement dans à Elementtree, qui est un peu plus pratique et sans doute la version plus récente de WeleTree est plus correcte pour permettre cela. Cependant, vous risquez toujours de ne pas vouloir, et la version de Python 3 accepte toujours les octets comme entrée. Vous commencez toujours par les octets de toute façon: en les transmettant directement de votre source d'entrée à Elementtree, vous devez le laisser faire de son codage ou de décoder intelligemment à l'intérieur du moteur analysé XML, ainsi que de la détection à la volée des déclarations de codage Dans le flux d'entrée, que vous pouvez faire avec XML, mais que vous ne pouvez pas faire de données textuelles arbitraires. Donc, laissant l'analyseur XML faire le travail du décodage est le bon endroit pour mettre cette responsabilité. P> ellementtree code> unicode, mais il préfère em> pour consommer des octets. Il sera fournir em> vous avec Unicode dans tous les cas. P>
io.stringio code>, vous devrez d'abord le convertir en autre chose. P >
STR code> (AKA octets code>) dans l'encodage UTF-8, en mémoire, comme dans votre exemple, utilisez xml.etree.celementtree.xml code> pour l'analyser dans XML dans un swoop tombé et ne vous inquiétez de rien: -). P>
xml.etree.celementtree.parse code> avec un io.bytesio code > strong> Pour le convertir en un flux d'octets en mémoire plutôt qu'une chaîne de caractères en mémoire. Si vous souhaitez utiliser io.open code>, utilisez-le avec le drapeau B code>, de sorte que vous obtenez des flux d'octets. P>