Python嵌套列表替换字符串中的unicode字符

时间:2014-03-06 15:02:56

标签: python unicode replace

尝试替换或删除此列表中的字符串以插入不允许它们的数据库

info=[[u'\xa0Buffalo\u2019s League of legends ...', '2012-09-05'], [u' \xa0RCKIN 0 - 1 WITHACK.nq\xa0  ', u'\xa0Buffalo\u2019s League of legends ...', '2012-09-05']]

我使用了这段代码

info = [[x.replace(u'\xa0', u'') for x in l] for l in info]
info = [[y.replace('\u2019s', '') for y in o] for o in info]

第一行有效,但第二行没有,有什么建议吗?

2 个答案:

答案 0 :(得分:4)

因为在第二种形式中\u2019s不被视为unicode字符串。只需将u添加到替换元素之前,就像这个

一样
print [[y.replace(u'\u2019s', '') for y in o] for o in info]]

<强>输出

[[u'Buffalo League of legends ...', u'2012-09-05'],
 [u' RCKIN 0 - 1 WITHACK.nq  ',
  u'Buffalo League of legends ...',
  u'2012-09-05']]

事实上你可以链接替换,就像这样

[[x.replace(u'\xa0', '').replace(u'\u2019s', '') for x in l] for l in info]

答案 1 :(得分:4)

删除第二行并执行:

info = [[x.encode('ascii', 'ignore')  for x in l] for l in info]

并查看结果是否可以接受。这将尝试将所有unicode转换为ascii并删除任何无法转换的字符。你只是想确定如果你失去了一个重要的unicode角色,这不是问题。

>>> info=[[u'\xa0Buffalo\u2019s League of legends ...', '2012-09-05'], [u' \xa0RCKIN 0 - 1 WITHACK.nq\xa0  ', u'\xa0Buffalo\u2019s League of legends ...', '2012-09-05']]
>>> info = [[x.encode('ascii', 'ignore')  for x in l] for l in info]
>>> info
[['Buffalos League of legends ...', '2012-09-05'], [' RCKIN 0 - 1 WITHACK.nq  ', 'Buffalos League of legends ...', '2012-09-05']]

发生了什么:

你的Python程序中的数据是Unicode(这很好。)

>>> u = u'\u2019'

对于互操作性,最佳做法是将Unicode字符串写入utf-8。这些是您应该存储在数据库中的字节:

>>> u.encode('utf-8')
'\xe2\x80\x99'
>>> utf8 = u.encode('utf-8')
>>> print utf8
’

然后当你将这些字节读回程序时,你应该对它们进行解码:

>>> utf8.decode('utf8')
u'\u2019'
>>> print utf8.decode('utf8')
’

如果您的数据库无法处理utf-8,那么我会考虑获取一个新数据库。