Unicode - 字符串 - 列表操作

3 投票
4 回答
7741 浏览
提问于 2025-04-16 15:38

我有一段数据 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,主要有两个原因:

  1. JSON不允许使用单引号字符串,比如'38',只能使用双引号,比如"38"
  2. 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']

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答