在Python中处理法语字母

时间:2016-11-24 20:10:49

标签: python string python-2.7 ascii french

我正在从包含法语和英文字母的文件中读取数据。我正在尝试构建一个包含所有可能的英文和法文字母的列表(存储为字符串)。我使用下面的代码执行此操作:

# encoding: utf-8
def trackLetter(letters, line):
    for a in line:
        found = False;
        for b in letters:
            if b==a:
                found = True
        if not found:
            letters += a

cur_letters = []; # for storing possible letters

data = urllib2.urlopen('https://duolinguist.wordpress.com/2015/01/06/top-5000-words-in-french-wordlist/', 'utf-8')
for line in data:
    trackLetter(cur_letters, line)
    # works if I print here

print cur_letters

此代码打印以下内容:

  

['t','h','e','o','f','a','n','d','i','r','s','b ','y','w',   '你','我','我','v','c','p','g','k','x','j','z','q','\ XC3' ,   '\ xa0','\ xaa','\ xb9','\ xa9','\ xa8','\ xb4','\ xae',' - ','\ xe2',   '\ x80','\ x99','\ xa2','\ xa7','\ xbb','\ xaf']

显然,尽管我指定了UTF编码,但法语字母在某种转换为ASCII时已经丢失了!奇怪的是,当我直接打印出这一行(显示为注释)时,法语字符看起来很完美!

我应该怎么做才能保留这些字符(é, è, ê, etc.),或将它们转换回原始版本?

2 个答案:

答案 0 :(得分:7)

它们不会丢失,当您打印列表时它们才会被转义。

当您在Python 2中打印列表时,它会调用列表本身的__str__方法,而不是每个单独的项目,并且列表的__str__方法会转义您的非ascii字符。有关更多解释,请参阅此优秀答案:

How does str(list) work?

以下代码段简洁地演示了这个问题:

char_list = ['é', 'è', 'ê']
print(char_list)
# ['\xc3\xa9', '\xc3\xa8', '\xc3\xaa']

print(', '.join(char_list))
# é, è, ê

答案 1 :(得分:0)

不是理想的答案 ,但作为解决方法,还可以手动添加法语字符:

french_letters = ['é',
        'à', 'è', 'ù',
        'â', 'ê', 'î', 'ô', 'û',
        'ç',
        'ë', 'ï', 'ü']

all_letters = cur_letters + french_letters