Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python处理法语字母_Python_String_Python 2.7_Ascii_French - Fatal编程技术网

用Python处理法语字母

用Python处理法语字母,python,string,python-2.7,ascii,french,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 i

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

# 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], ‘u’、‘m’、‘l’、‘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的过程中丢失了!奇怪的是,当我直接打印出这行文字(显示为注释)时,法语字符看起来非常完美


我应该如何保存这些字符(
é、è、è等)
,或者将它们转换回原始版本?

它们没有丢失,只是在打印列表时转义而已

在Python2中打印列表时,它调用列表本身的
\uuuuu str\uuuu
方法,而不是在每个单独的项上,并且列表的
\uu str\uuu
方法转义非ascii字符。有关更多说明,请参见此优秀答案:

以下代码片段简要地说明了这个问题:

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

print(', '.join(char_list))
# é, è, ê
这不是一个理想的答案,但作为一种解决办法,也可以手动添加法语字符:

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

all_letters = cur_letters + french_letters

不可能重复,阅读文件不是问题所在-请参阅OP的“如果我在这里打印就可以工作”评论,这肯定很有帮助,尽管它似乎无法解决我的问题。您的代码对我来说非常有效,但由于某种原因,当我在代码末尾调用
print('''.join(cur_字母))
时,它会给我一个错误
[解码错误-输出不是utf-8]
如果我调用法语字符SAH上的
打印类型(a)
,这个错误甚至会抛出到我的
trackLetter()
函数中。。如果你通过
编解码器打开文件,它能解决你的问题吗?打开(“words.txt”,“r”,“utf-8”)
?为了清晰起见,我在我的原始帖子中简化了这个问题-我实际上是在阅读一个网站上的行文(参见编辑过的帖子)。