81 votes

Convertir une représentation de chaîne de caractères d'une liste en un objet liste réel

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 ?

112voto

fraxel Points 13844
>>> 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.

27voto

Óscar López Points 97105

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.

2voto

mgilson Points 92954

Je pense que c'est à cela que sert ast.literal_eval.

( http://docs.python.org/library/ast.html#ast.literal_eval )

Prograide.com

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.

Powered by:

X