Faire d'un texte une ligne de code

noradan Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
heyquem Messages postés 808 Statut Membre -
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

  1. heyquem Messages postés 808 Statut Membre 131
     
    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