包含特殊字符的列表

时间:2017-12-28 16:59:41

标签: python xml list encoding python-2.x

使用Python 2,我从变量(超出xml标签)中保存字符串并将其存储到列表中。

首先:字符串包含特殊字符,当我打印它们时,即使使用编码(“ISO-8859-1”)

也不会正确显示

第二:字符串在列表中显示每个字符串,我希望它们在同一个列表中

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)

这就是我得到的

['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']

这是我所期待的:

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

有谁知道如何解决这个问题?感谢

1 个答案:

答案 0 :(得分:1)

Python3自动处理此问题,您无需使用encode 对于列表,您将在每次迭代时创建一个新的,在循环上方创建它,并在迭代完XML元素后打印它。

工作示例(我已经多次将单词abiétacée添加到XML中以重现您的情况):

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)

输出

  

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