尝试替换或删除此列表中的字符串以插入不允许它们的数据库
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]
第一行有效,但第二行没有,有什么建议吗?
答案 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
,那么我会考虑获取一个新数据库。