Python: replace french letters with english
希望将单词内的所有法语字母替换为它们的ASCII等价物。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | letters = [['é', 'à'], ['è', 'ù'], ['a', 'ê'], ['?', '?'], ['?', '?']] for x in letters: for a in x: a = a.replace('é', 'e') a = a.replace('à', 'a') a = a.replace('è', 'e') a = a.replace('ù', 'u') a = a.replace('a', 'a') a = a.replace('ê', 'e') a = a.replace('?', 'i') a = a.replace('?', 'o') a = a.replace('?', 'u') a = a.replace('?', 'c') print letters[0][0] |
但是,此代码打印
我建议你考虑使用翻译表。
1 2 3 4 5 | translationTable = str.maketrans("éàèùaê????","eaeuaeiouc") test ="Héll? Càèùveraêt J????" test = test.translate(translationTable) print(test) |
将打印
您也可以使用
1 2 3 4 5 | from unidecode import unidecode s ="Héll? Càèùveraêt J???? ???ü?" s = unidecode(s) print(s) |
结果将是相同的字符串,但法语字符将被转换为其等价的ASCII码:
replace函数返回被替换字符的字符串。
在代码中,不存储此返回值。
循环中的行应为"a=a.replace('_','e')"。
您还需要存储输出,以便最终打印它。
E:这篇文章解释了如何访问循环中的变量
这是另一个解决方案,使用名为
在Unicode结构中,类似"?"的字符实际上是一个复合字符,由字符"o"和另一个称为"组合重音符"的字符组成,基本上是"?".利用
1 2 3 4 5 6 7 | >>> import unicodedata as ud >>> ud.decomposition('ù') '0075 0300' >>> chr(0x0075) 'u' >>> >>> chr(0x0300) '?' |
因此,要从"_"中检索"U",我们可以先执行字符串拆分,然后使用内置的
1 2 3 4 5 6 7 8 | import unicodedata as ud def get_ascii_char(c): s = ud.decomposition(c) if s == '': # for an indecomposable character, it returns '' return c code = int('0x' + s.split()[0], 0) return chr(code) |
我不熟悉Python中的Unicode表示和实用程序。如果有人对改进这段代码有任何建议,我会很高兴知道的!
干杯!