用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”)
?为了清晰起见,我在我的原始帖子中简化了这个问题-我实际上是在阅读一个网站上的行文(参见编辑过的帖子)。