Python: 将法语字母替换为英语
Python: replace french letters with english
想用 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]
但是此代码打印 é
。我怎样才能使这项工作?
replace
函数 return 替换了字符的字符串。
在您的代码中,您没有存储此 return 值。
循环中的行应该是 a = a.replace('é', 'e')
。
您还需要存储该输出,以便最后打印。
e: 这 post 解释了如何访问循环中的变量
我可以建议你考虑使用 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) # Hello Caeuveraet Jiouc iiaue
结果将是相同的字符串,但法语字符将被转换为其等效的 ASCII:Hello Caeuveraet Jiouc iiaue
这是另一个解决方案,使用名为 unicodedata
的低级 unicode 包。
在unicode结构中,像'ô'这样的字符实际上是一个复合字符,由字符'o'和另一个名为'[=28=的字符组成]COMBINING GRAVE ACCENT',基本上就是 '̀'。使用unicodedata
中的方法decomposition
,可以得到这两部分的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 表示和实用程序的新手。如果有人对改进这段代码有任何建议,我将非常乐意学习!
干杯!
我可能来不及了,但这可能会帮助寻找相同答案的人。
虽然我是 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)
想用 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]
但是此代码打印 é
。我怎样才能使这项工作?
replace
函数 return 替换了字符的字符串。
在您的代码中,您没有存储此 return 值。
循环中的行应该是 a = a.replace('é', 'e')
。
您还需要存储该输出,以便最后打印。
e: 这 post 解释了如何访问循环中的变量
我可以建议你考虑使用 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) # Hello Caeuveraet Jiouc iiaue
结果将是相同的字符串,但法语字符将被转换为其等效的 ASCII:Hello Caeuveraet Jiouc iiaue
这是另一个解决方案,使用名为 unicodedata
的低级 unicode 包。
在unicode结构中,像'ô'这样的字符实际上是一个复合字符,由字符'o'和另一个名为'[=28=的字符组成]COMBINING GRAVE ACCENT',基本上就是 '̀'。使用unicodedata
中的方法decomposition
,可以得到这两部分的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 表示和实用程序的新手。如果有人对改进这段代码有任何建议,我将非常乐意学习!
干杯!
我可能来不及了,但这可能会帮助寻找相同答案的人。 虽然我是 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)