Faire d'un texte une ligne de code [Fermé]

Signaler
Messages postés
14
Date d'inscription
mercredi 29 juillet 2009
Statut
Membre
Dernière intervention
6 février 2017
-
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
-
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

1 réponse

Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
119
Bonjour


http://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
:

http://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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 82893 internautes nous ont dit merci ce mois-ci