Faire d'un texte une ligne de code

Fermé
noradan Messages postés 18 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 7 janvier 2024 - 27 déc. 2013 à 18:07
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 27 déc. 2013 à 23:54
Bonjour,

existe-t-il un moyen pour faire d'une ligne de texte par exemple
"toto=[[1,2],[4,5]]"

quelque chose qui fasse ce que vous pensez c'est-à-dire
qui assigne à toto la liste [[1,2],[4,5]]

Autrement bien sûr qu'en lisant la chaîne caractère par caractère avec des bordés de tests
et de recherche d'occurence

quelque chose du genre "eval" qui interprète un texte comme un code python (si ce texte est correctement rédigé bien entendu)

(C'est pour stocker des listes dans un fichier et pouvoir en rappeler une avec son nom)

Merci

A voir également:

1 réponse

heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 130
Modifié par heyquem le 27/12/2013 à 23:59
Bonjour


https://docs.python.org/2/reference/simple_stmts.html#the-exec-statement

exec("toto=[[1,2],[4,5]]" )



Mais ce que tu veux faire s'appelle de la sérialisation / désérialisation.
Tu pense bien que tu n'est pas le premier à avoir eu envie de faire ça et que Python dispose d'un module dédié pour ça,
pickle
:

https://docs.python.org/2/library/pickle.html#index-0

from cPickle import dump, load

with open('fifi.pkl','wb') as f:
dump([[1,2],[4,5]],f)

with open('fifi.pkl','rb') as g:
titi = load(g)

print 'titi:',titi

Nota Bene: il faut ouvrir le fichier de pickling en mode binaire, càd avec
'wb'
et
'rb'
comme mode, et non pas seulement
'w'
et
'r'
.

Je crois qu'on peut mettre n'importe quelle extension au fichier de sérialisation, mais il vaut mieux éviter des extensions qui ont déjà un sens comme .rtf , .pdf , .jpg etc, ça ne sert à rien de créer de potentiels problèmes

Je te laisse lire dans la doc la différence entre
pickle
et
cPickle
.
1