J'ai une chaîne de caractères qui ressemble à une liste, disons :
fruits = "['pomme', 'orange', 'banane']"
Quel serait le moyen de convertir cela en objet liste ?
J'ai une chaîne de caractères qui ressemble à une liste, disons :
fruits = "['pomme', 'orange', 'banane']"
Quel serait le moyen de convertir cela en 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. D'après la documentation :
Évalue en toute sécurité un nœud d'expression ou une chaîne contenant une expression Python. La chaaine ou le nœud fourni peut uniquement consister en les structures littérales Python suivantes : chaînes, nombres, tuples, listes, dictionnaires, booléens et None.
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 l'affaire :
fruits = eval("['apple', 'orange', 'banana']")
fruits
> ['apple', 'orange', 'banana']
Ou comme expliqué dans cet article, on peut parvenir au même résultat de manière un peu plus sûre (c'est-à-dire : sans risquer des effets secondaires non intentionnels ou des injections de code malveillant) 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 à cela que sert ast.literal_eval.
( http://docs.python.org/library/ast.html#ast.literal_eval )
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.