2010-09-01 90 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

相關問題