Unicode - 字符串 - 列表操作

3
我有一个数据s = u"[u'38', u'36', u'34', u'32']",它的数据类型是unicode。我想把这个数据变成简单的元素列表,如s= ['38','36','32']
我尝试使用simplejson.loads,但它不适用于这种字符串格式("['s']"),而是适用于('["s"]')。请问有没有人能指导我解决这个问题?
提前感谢。
4个回答

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']

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

0
使用 re 模块将字符串分割成所需的元素,例如:
re.findall("u\'([^\']+)\'", u"[u'38', u'36', u'34', u'32']")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接