我正在尝试用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)
我应该使用什么命令?
谢谢!
答案 0 :(得分:1)
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']
答案 1 :(得分:0)
您不能将重音字符编码为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']
您需要确保在执行将字符串写入磁盘之前重新编码字符串,这需要编码字符串。您可以通过调用encode('utf-8')
对象上的unicode
来执行此操作。