2017-12-28 1 views
1

Mit Python 2 speichere ich Zeichenketten von einer Variablen (die sich außerhalb eines xml-Tags befindet) und speichere sie in einer Liste.Liste mit Sonderzeichen

Erstens: die Saiten enthalten Sonderzeichen, wenn ich sie drucken sie zeigen nicht richtig selbst, die kodieren bin mit („ISO-8859-1“)

Zweitens: Die Saiten zeigen sich jedes in eine Liste und ich sie will

in der gleichen Liste sein
import lxml.objectify 
from lxml import etree 
import codecs 
import xml.etree.cElementTree as ET 
file_path = "C:\Users\HP\Downloads\Morphalou-2.0.xml" 
for event, elem in ET.iterparse(file_path, events=("start", "end")): 
    if elem.tag == 'orthography' and event =='start': 
     data = elem.text 
     my_list = [] 
     if data is not None : 
      for i in data.split('\n'): 
       my_list.append(i.encode("ISO-8859-1")) 
      print (my_list) 

Dies ist, was

['abiotique'] 
['abiotiques'] 
[u'abi\xe9tac\xe9e'] 
[u'abi\xe9tac\xe9e'] 
[u'abi\xe9tac\xe9es'] 
[u'abi\xe9tin'] 
[u'abi\xe9tin'] 
[u'abi\xe9tins'] 
[u'abi\xe9tine'] 
[u'abi\xe9tines'] 

bin immer Dies ist, was ich erwarten:

['abiotique','abiotiques','abiétacée',...] 

Kann jemand das beheben? Danke

+0

Verwandte https://stackoverflow.com/a/47882550/5320906 – snakecharmerb

+0

Eine Datei: Morphalou-2.0.xml – Ran

+0

Es ist, als hame, dass Sie gezwungen sind, Python 2 zu verwenden, ist die Unicode-Behandlung in Python 3 viel besser. In der Zwischenzeit mag dieser Artikel hilfreich sein: [Pragmatischer Unicode] (http://nedbatchelder.com/text/unipain.html), der von SO-Veteran Ned Batchelder geschrieben wurde. –

Antwort

1

Python3 behandelt dies automatisch, Sie müssen encode nicht verwenden.
Wie bei der Liste erstellen Sie mit jeder Iteration eine neue, erstellen sie oberhalb der Schleife und drucken Sie, nachdem die Iteration über die XML-Elemente abgeschlossen ist.

Arbeitsbeispiel (Ich habe hinzugefügt, um das Wort abiétacée in eine XML ein paar Mal um Ihre Situation zu reproduzieren):

my_list = [] 
for event, elem in ET.iterparse(file_path, events=("start", "end")): 
    if elem.tag == 'orthography' and event =='start': 
     data = elem.text 
     if data is not None : 
      for i in data.split('\n'): 
       my_list.append(i) 
print (my_list) 

Ausgänge

[ 'abiétacée', 'abiétacée', 'abiétacée', 'abiétacée']

+0

Das Problem ist, dass ich mit Python 2,7 – Ran

+0

Danke @Artier arbeite, reparierte es. Was Python2.7 betrifft, werde ich versuchen, die Dokumente zu lesen, um etwas hilfreiches zu finden –