如何在列表中删除unicode

时间:2017-07-27 14:02:03

标签: python unicode

我想从列表中删除unicode字符串 例如  机场 [U' KATL'中,u' KCID']

预期产出

[KATL,KCID]

按照以下链接

Strip all the elements of a string list

尝试了其中一个解决方案

  
    
      

my_list = ['此\ n','是\ n',' a \ n',' list \ n', &n','单词\ n']

             

map(str.strip,my_list)       ['此',',' a','列表','','字']

    
  

收到以下错误

TypeError:描述符' strip'需要一个' str。对象但收到了一个' unicode'

3 个答案:

答案 0 :(得分:10)

首先,我强烈建议您切换到Python 3,它将Unicode字符串视为一等公民(所有字符串都是Unicode字符串,但它们被称为str)。

但是如果你必须在Python 2中使用它,你可以用unicode删除unicode.strip个字符串(如果你的字符串是真正的Unicode字符串):

>>> lst = [u'KATL\n', u'KCID\n']
>>> map(unicode.strip, lst)
[u'KATL', u'KCID']

如果您的unicode字符串仅限于ASCII子集,则可以使用以下代码将其转换为str

>>> lst = [u'KATL', u'KCID']
>>> map(str, lst)
['KATL', 'KCID']

请注意,对于非ASCII字符串,此转换将失败。要将Unicode代码点编码为str(字节串),您必须选择编码算法(通常为UTF-8)并在字符串上使用.encode()方法:

>>> lst = [u'KATL', u'KCID']
>>> map(lambda x: x.encode('utf-8'), lst)
['KATL', 'KCID']

答案 1 :(得分:2)

listcomp似乎是最简单的解决方案:

[s.strip() for s in my_list]

如果您热衷于使用地图,我会使用lambda来获取对象自己的个人strip函数,而不是要求它是由某个特定库提供的strip

map(lambda s: s.strip(), my_list)

答案 2 :(得分:2)

将unicode字符串转换为字节字符串的唯一可靠方法是将编码成可接受的编码(ascii,Latin1和UTF8是最常见的编码)。根据定义,UTF8能够编码任何unicode字符,但您会在字符串中找到非ascii字符,并且字节中的大小将不再是(unicode)字符的数量。 Latin1能够代表大多数西欧语言字符,每个字符关系为1个字节,ascii是始终正确表示的字符集。

如果您希望能够处理包含在选择的字符集中无法表示的字符的字符串,您可以使用参数errors='ignore'删除它们,或errors='replace'将其替换为替换它们角色,通常为?

因此,如果我已正确理解您的要求,您可以将unicode字符串列表转换为字节字符串列表:

[ x.encode('ascii', errors='replace') for x in my_list ]