Unicode - 字符串 - 列表操作
我有一段数据 s = u"[u'38', u'36', u'34', u'32']"
,它的类型是unicode。我想把这段数据变成一个简单的元素列表,比如 s= ['38','36','32']
。
我尝试使用simplejson.loads,但它不管用,因为simplejson只能处理像('["s"]')这样的字符串,而不能处理("['s']")这种格式。所以请大家帮我解决这个问题。
提前谢谢大家!
4 个回答
1
问题在于这个字符串不是有效的JSON语法。它是有效的Python语法,但不是JSON,主要有两个原因:
- JSON不允许使用单引号字符串,比如
'38'
,只能使用双引号,比如"38"
。 - JSON不允许在字符串前加个u,比如
u"38"
,只能用普通字符串,普通字符串默认就是Unicode,比如"38"
。
你需要改变输入格式,或者使用可以处理Python字符串的工具。
你可以使用eval
,这个函数可以读取包含Python语法的字符串,但要注意,如果你接受任意输入,这样做是非常危险的,因为别人可以提供执行的代码。不过,它确实可以工作:
>>> eval(u"[u'38', u'36', u'34', u'32']")
[u'38', u'36', u'34', u'32']
编辑:khachik的回答可能比eval
更好,因为它不会受到执行任意Python代码的影响,只会读取Python数据结构。
1
如果你能使用ast
这个库,你可以用ast.literal_eval
这个功能。
9
>>> import ast
>>> s = u"[u'38', u'36', u'34', u'32']"
>>> [ item.encode('ascii') for item in ast.literal_eval(s) ]
['38', '36', '34', '32']
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。