Python:用英语替换法语字母

时间:2016-12-06 21:08:12

标签: python string python-2.7 ascii french

想要用等效的ASCII替换单词中的所有法语字母。

letters = [['é', 'à'], ['è', 'ù'], ['â', 'ê'], ['î', 'ô'], ['û', 'ç']]

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.replace('ê', 'e')
        a = a.replace('î', 'i')
        a = a.replace('ô', 'o')
        a = a.replace('û', 'u')
        a = a.replace('ç', 'c')

print letters[0][0]

但是,此代码会打印é。我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:14)

我建议您考虑使用translation tables

translationTable = str.maketrans("éàèùâêîôûç", "eaeuaeiouc")

test = "Héllô Càèùverâêt Jîôûç"
test = test.translate(translationTable)
print(test)

将打印Hello Caeuveraet Jiouc。请原谅我的法语。

答案 1 :(得分:4)

您也可以使用unidecode。安装它:pip install unidecode
然后,做:

from unidecode import unidecode

s = "Héllô Càèùverâêt Jîôûç ïîäüë"
s = unidecode(s)
print(s)

结果将是相同的字符串,但法语字符将转换为其ASCII等效字符:Hello Caeuveraet Jiouc iiaue

答案 2 :(得分:3)

replace函数返回替换字符的字符串。

在您的代码中,您不存储此返回值。

循环中的行应为“a = a.replace('é','e')”。

您还需要存储该输出,以便最后打印出来。

e:post解释了如何访问循环中的变量

答案 3 :(得分:1)

这是另一种解决方案,使用称为<table> <tr th:each="cust, iter: ${customer}" th:if="${iter.even}" > <td th:text="${cust[iter.index].accno}" /> <td th:text="${cust[iter.index].reasons}" /> <td th:text="${cust[iter.index+1].accno}" /> <td th:text="${cust[iter.index+1].reasons}" /> </tr> </table> 的低级unicode程序包。

在unicode结构中,像'ô'这样的字符实际上是复合字符,由字符'o'和另一个称为' COMBINING GRAVE ACCENT '的字符组成,基本上是'̀'。使用unicodedata中的方法decomposition,可以获得这两部分的unicode(以十六进制表示)。

unicodedata

因此,要从“ù”中检索“ u”,我们可以先进行字符串拆分,然后使用内置的>>> import unicodedata as ud >>> ud.decomposition('ù') '0075 0300' >>> chr(0x0075) 'u' >>> >>> chr(0x0300) '̀' 函数进行转换(请参阅this线程以转换十六进制)字符串转换为整数),然后使用int函数获取字符。

chr

我是python中的unicode表示和实用工具的新手。如果有人对改进这段代码有任何建议,我将很高兴得知!!

干杯!

答案 4 :(得分:1)

我可能为时已晚,但可能会帮助寻找相同答案的人。 尽管我是Python的新手,但我会采用这种方式:

letterXchange = {'à':'a', 'â':'a', 'ä':'a', 'é':'e', 'è':'e', 'ê':'e', 'ë':'e',
    'î':'i', 'ï':'i', 'ô':'o', 'ö':'o', 'ù':'u', 'û':'u', 'ü':'u', 'ç':'c'}
text = input() # Replace it with the string in your code.
for item in list(text):
    if item in letterXchange:
        text = text.replace(item,letterXchange.get(str(item)))
    else:
        pass
print (text)