【问题标题】:Unicode - String - list ManipulationUnicode - 字符串 - 列表操作
【发布时间】:2011-04-13 11:37:56
【问题描述】:
我有一个数据s = u"[u'38', u'36', u'34', u'32']",它的数据类型为 unicode
我想把这些数据变成像s= ['38','36','32']这样的简单元素列表,
我尝试使用 simplejson.loads 但它无法使用简单的 json 与 ('["s"]') 这种类型的字符串而不是 ("['s']") 一起工作,所以请任何朋友指导我解决这个问题
提前致谢
【问题讨论】:
标签:
python
string
unicode
operation
【解决方案1】:
>>> 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']
【解决方案3】:
问题在于该字符串不是有效的 JSON 语法。它是有效的 Python 语法,但不是 JSON,原因有两个:
- JSON 不允许使用单引号字符串
'38',只能使用双引号 "38"。
- JSON 不允许在字符串
u"38" 之前使用 u,只能使用隐式 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 数据结构。
【解决方案4】:
使用re 模块将您的字符串拆分为所需的元素。例如
re.findall("u\'([^\']+)\'", u"[u'38', u'36', u'34', u'32']")