2010-09-01 65 views
0

我有一个字符串"[u'foo']"(是的,它包括方括号和u'')。我必须将其转换为看起来像[u'foo']的列表。Python将格式化的字符串转换为列表

list("[u'foo']")不起作用。

有什么建议吗?

+1

你能澄清?列表应该包含什么? – Mike 2010-09-01 22:46:42

+0

字符串从哪里来?这不是一个非常有用的格式;如果您正在生成它,请考虑使用更好的格式。 – habnabit 2010-09-01 23:16:37

+0

我从GAE bulkloader bulk_download获取它。它是数据存储中的列表属性。它得到的下载并最终看起来像在我的CSV文件。有什么建议么? – Albert 2010-09-02 00:15:36

回答

17
>>> import ast 
>>> s = "[u'foo']" 
>>> ast.literal_eval(s) 
[u'foo'] 

documentation

+2

+1代表安全的'literal_eval'而不是'eval'。 – 2010-09-01 22:54:57

1
eval("[u'foo']", {'__builtins__':[]}, {}) 
+0

你知道,传递'locals'和'globals'的空字符不足以'安全''eval',是吗?这仍然给攻击者基本上完全访问您的系统。 – habnabit 2010-09-01 23:39:43

+0

POC:'eval('__ import __(“os”)。getcwd()',{},{})',我编辑了我的答案 – leoluk 2010-09-01 23:42:09

+0

@leoluk,它不能'证明'任何东西。如果x .__ name__ =='file'] [0]('/ etc/passwd')。readline()函数返回类型为[x的类型(type(1)).__ bases __ [0] .__子类__() “,{},{})'给我我的系统上的第一行'/ etc/passwd'。 – habnabit 2010-09-01 23:49:19

相关问题