如何在Python中重新格式化字符串以不包含重音字母?

如何在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

我试图从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 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可以完全丢失重音字符,我想这是可行的。