在 Python 中处理法语字母
Handling french letters in Python
我正在从包含法语和英语字母的单词的文件中读取数据。我正在尝试构建所有可能的英文和法文字母的列表(存储为字符串)。我使用以下代码执行此操作:
# 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 的过程中丢失了!奇怪的是,当我直接打印出该行时(显示为注释),法语字符完美地出现了!
我应该怎么做才能保留这些字符 (é, è, ê, etc.
),或者将它们转换回原来的版本?
它们并没有丢失,它们只是在您打印列表时被转义了。
当您在 Python 2 中打印列表时,它会调用列表本身的 __str__
方法,而不是每个单独的项目,并且列表的 __str__
方法会转义您的非-ascii 字符。请参阅此优秀答案以获取更多解释:
以下代码片段简洁地演示了该问题:
char_list = ['é', 'è', 'ê']
print(char_list)
# ['\xc3\xa9', '\xc3\xa8', '\xc3\xaa']
print(', '.join(char_list))
# é, è, ê
不是一个理想的答案,但作为解决方法,也可以手动添加法语字符:
french_letters = ['é',
'à', 'è', 'ù',
'â', 'ê', 'î', 'ô', 'û',
'ç',
'ë', 'ï', 'ü']
all_letters = cur_letters + french_letters
我正在从包含法语和英语字母的单词的文件中读取数据。我正在尝试构建所有可能的英文和法文字母的列表(存储为字符串)。我使用以下代码执行此操作:
# 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 的过程中丢失了!奇怪的是,当我直接打印出该行时(显示为注释),法语字符完美地出现了!
我应该怎么做才能保留这些字符 (é, è, ê, etc.
),或者将它们转换回原来的版本?
它们并没有丢失,它们只是在您打印列表时被转义了。
当您在 Python 2 中打印列表时,它会调用列表本身的 __str__
方法,而不是每个单独的项目,并且列表的 __str__
方法会转义您的非-ascii 字符。请参阅此优秀答案以获取更多解释:
以下代码片段简洁地演示了该问题:
char_list = ['é', 'è', 'ê']
print(char_list)
# ['\xc3\xa9', '\xc3\xa8', '\xc3\xaa']
print(', '.join(char_list))
# é, è, ê
不是一个理想的答案,但作为解决方法,也可以手动添加法语字符:
french_letters = ['é',
'à', 'è', 'ù',
'â', 'ê', 'î', 'ô', 'û',
'ç',
'ë', 'ï', 'ü']
all_letters = cur_letters + french_letters