想用等效的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]
但是,此代码打印é
。我怎样才能做到这一点?
我建议你考虑使用translation tables。
translationTable = str.maketrans("éàèùâêîôûç", "eaeuaeiouc")
test = "Héllô Càèùverâêt Jîôûç"
test = test.translate(translationTable)
print(test)
将打印Hello Caeuveraet Jiouc
。抱歉我法语不好。
你也可以使用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
replace函数返回替换字符的字符串。
在您的代码中,您不存储此返回值。
循环中的行应为“a = a.replace('é','e')”。
您还需要存储该输出,以便最终打印出来。
e:这个post解释了如何访问循环中的变量
这是另一种解决方案,使用名为unicodedata
的低级unicode包。
在unicode结构中,像'ô'这样的字符实际上是一个复合字符,由字符'o'和另一个称为'COMBINING GRAVE ACCENT'的字符组成,基本上是''。使用decomposition
中的unicodedata
方法,可以获得这两部分的unicodes(十六进制)。
>>> import unicodedata as ud
>>> ud.decomposition('ù')
'0075 0300'
>>> chr(0x0075)
'u'
>>> >>> chr(0x0300)
'̀'
因此,要从'ù'中检索'u',我们可以先进行字符串拆分,然后使用内置的int
函数进行转换(请参阅this线程将十六进制字符串转换为整数),然后获取字符使用chr
函数。
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表示和实用程序的新手。如果有人有任何改进这段代码的建议,我将非常乐意了解到这一点!
干杯!