如何在Python中重新格式化字符串以不包含重音字母?
我试图从Python中csv文件的一列中创建一个位置列表 这是列中的一个条目:如何在Python中重新格式化字符串以不包含重音字母?,python,string,Python,String,我试图从Python中csv文件的一列中创建一个位置列表 这是列中的一个条目: Rio Balira del Orien,Riu Valira d'Orient,Riu Valira d’Orient,Río Balira del Orien 这是当前状态下的对应列表: locs = ['Rio Balira del Orien', "Riu Valira d'Orient", 'Riu Valira d\xe2\x80\x99Orient', 'R\xc3\xado Balira del O
Rio Balira del Orien,Riu Valira d'Orient,Riu Valira d’Orient,Río Balira del Orien
这是当前状态下的对应列表:
locs = ['Rio Balira del Orien', "Riu Valira d'Orient", 'Riu Valira d\xe2\x80\x99Orient', 'R\xc3\xado Balira del Orien']
在我的程序中,我需要检查列表中是否有给定的单词,因此我尝试删除重音字母、撇号等的疯狂字符串格式(例如,\xc3\xad=í
),并且每个位置都使用简单的小写ascii。当我尝试使用代码时
loclist = [x.encode('ascii').lower() for x in locs]
它抛出错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 12: ordinal not in range(128)
我应该使用什么命令来代替
谢谢
locs = ['Rio Balira del Orien', "Riu Valira d'Orient", 'Riu Valira d\xe2\x80\x99Orient', 'R\xc3\xado Balira del Orien']
要完全删除:
print [unicode(x,errors="ignore") for x in locs]
[u'Rio Balira del Orien', u"Riu Valira d'Orient", u'Riu Valira dOrient', u'Ro Balira del Orien']
编码为ascii码
import unicodedata
print [unicodedata.normalize('NFD', x.decode('utf-8')).encode('ascii', 'ignore') for x in locs]
['Rio Balira del Orien', "Riu Valira d'Orient", 'Riu Valira dOrient', 'Rio Balira del Orien']
不能将重音字符编码为ascii,必须使用支持更大字符集的扩展编码类型。现在,您有一个包含UTF-8编码字符串的列表,这是一种合理的存储方式。您可以将它们解码为
unicode
对象,这是一个很好的最佳实践:
>>> [l.decode('utf-8') for l in locs]
[u'Rio Balira del Orien', u"Riu Valira d'Orient", u'Riu Valira d\u2019Orient', u'R\xedo Balira del Orien']
在将字符串写入磁盘之前,您只需要确保对字符串进行了重新编码,这需要编码字符串。您可以通过在
unicode
对象上调用encode('utf-8')
来实现这一点。如果OP可以完全丢失重音字符,我想这是可行的。