I have a string that looks identical to a list, let's say:
fruits = "['apple', 'orange', 'banana']"
What would be the way to convert that to a list object?
>>> fruits = "['apple', 'orange', 'banana']"
>>> import ast
>>> fruits = ast.literal_eval(fruits)
>>> fruits
['apple', 'orange', 'banana']
>>> fruits[1]
'orange'
As pointed out in the comments ast.literal_eval is safe. From the docs:
Safely evaluate an expression node or a string containing a Python expression. The string or node provided may only consist of the following Python literal structures: strings, numbers, tuples, lists, dicts, booleans, and None.
This can be used for safely evaluating strings containing Python expressions from untrusted sources without the need to parse the values oneself.
eval.ast.literal_eval is successful only for literals and nothing else. It does protect your program from code injection, for instance "['apple', 'orange', 'banana'];import os;os.remove('a_file')" will fail with literal_evalfruits = "['apple', 'orange', 'banan'a']" how would you handle that comma between banana and a.A simple call to eval() will do:
fruits = eval("['apple', 'orange', 'banana']")
fruits
> ['apple', 'orange', 'banana']
Or as explained in this article, the same can be accomplished a bit more safely (meaning: without risking unintended side-effects or malicious code injections) like this:
fruits = eval("['apple', 'orange', 'banana']", {'__builtins__':None}, {})
This solution has the advantage of not depending on additional modules.
eval(frtstring,{__builtins__:None},{})eval() here. ast.literal_eval() will do the job in a much better, safer way.{'__builtins__':None}. Sorry about that.ast.literal_eval is better for this, eval works (and it is a useful once in a while so it is worth knowing about). I don't see any reason to downvote it since it does do what the question asked (+1 from me).eval(), that even {'__builtins__': None} is not going to save you from.I think this is what ast.literal_eval is for.
( http://docs.python.org/library/ast.html#ast.literal_eval )