J'ai une chaîne qui ressemble à une liste, disons:
fruits = "['Apple', 'orange', 'banana']"
Quelle serait la façon de convertir cela en un objet liste?
>>> fruits = "['Apple', 'orange', 'banana']"
>>> import ast
>>> fruits = ast.literal_eval(fruits)
>>> fruits
['Apple', 'orange', 'banana']
>>> fruits[1]
'orange'
Comme indiqué dans les commentaires ast.literal_eval est sûr . De la documentation:
Évaluez en toute sécurité un nœud d'expression ou une chaîne contenant une expression Python. La chaîne ou le nœud fourni ne peut être composé que des structures littérales Python littérales: chaînes, nombres, tuples, listes, dict, booléens et Aucun.
Cela peut être utilisé pour évaluer en toute sécurité des chaînes contenant des expressions Python provenant de sources non fiables sans avoir besoin d'analyser les valeurs soi-même.
Un simple appel à eval()
fera:
fruits = eval("['Apple', 'orange', 'banana']")
fruits
> ['Apple', 'orange', 'banana']
Ou comme expliqué dans cet article , la même chose peut être accomplie un peu plus en toute sécurité (ce qui signifie: sans risquer d'effets secondaires involontaires ou d'injections de code malveillantes) comme ceci:
fruits = eval("['Apple', 'orange', 'banana']", {'__builtins__':None}, {})
Cette solution a l'avantage de ne pas dépendre de modules supplémentaires.
Je pense que c'est à ça que sert ast.literal_eval.
( http://docs.python.org/library/ast.html#ast.literal_eval )