2010-09-01 3 views
0

У меня есть строка "[u'foo']" (Да, она включает квадратные скобки и u''). Мне нужно преобразовать это в список, который выглядит как [u'foo'].Python преобразовать форматированную строку в список

list("[u'foo']") не будет работать.

Любые предложения?

+1

Можете ли вы уточнить? Какой список должен содержать? – Mike

+0

Откуда взялась строка? Это не очень полезный формат; если вы его генерируете, подумайте об использовании лучшего формата. – habnabit

+0

Я получаю его от массового загрузчика GAE bulk_download. Это свойство списка в хранилище данных. Он загружается и заканчивается таким же образом в моем файле csv. Какие-либо предложения? – Albert

ответ

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

documentation

+2

+1 для безопасного 'literal_eval' вместо' eval'. –

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

Вы знаете, что пропустить пустой dicts для 'locals' и' globals' недостаточно для «защиты» 'eval', да? Это по-прежнему дает злоумышленнику в основном полный доступ к вашей системе. – habnabit

+0

POC: 'eval ('__ import __ (« os »). Getcwd()', {}, {})', я отредактировал свой ответ – leoluk

+0

@leoluk, который ничего не доказывает. 'eval (" [x for x in type (type (1)) .__ основы __ [0] .__ подклассы __(), если x .__ name__ == 'file'] [0] ('/ etc/passwd'). readline() ", {}, {})' дает мне первую строку '/ etc/passwd' в моей системе. – habnabit

Смежные вопросы