IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Pickle et liste de listes


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Pickle et liste de listes
    Bonjour
    j'ai un petit souci avec pickle.

    Je crée une liste de listes du genre Liste =[[Toto,1,2,3],[Titi,4,5,6],[Tata,0,2,6]] et je mets ça dans un fichier avec pickle.dump(Liste,MonFichier)
    Jusque là tout va bien, les données sont sauvegardées correctement.

    Après pour accéder au tableau, je fais pickle.load(MonFichier), mais il ne me renvoie qu'une liste avec la première liste dedans :
    [[Toto,1,2,3]].
    D'après la doc, j'avais compris que pickle.load devait me renvoyer le premier élément sauvegardé dans le fichier, en l'occurrence comme dans le fichier il n'y a qu'un élément, la liste de listes [[Toto,1,2,3],[Titi,4,5,6],[Tata,0,2,6]], il devrait me renvoyer la liste complète non ?

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour

    le problème vient d'ailleurs car ça fonctionne parfaitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
    [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> Liste =[['Toto',1,2,3],['Titi',4,5,6],['Tata',0,2,6]]
    >>> import pickle
    >>> pickle.dump(Liste, open('liste.pickle', 'w'))
    >>> 
    >>> autre = pickle.load(open('liste.pickle'))
    >>> 
    >>> autre == Liste
    True
    >>> autre
    [['Toto', 1, 2, 3], ['Titi', 4, 5, 6], ['Tata', 0, 2, 6]]
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Effectivement, là ça marche, comme je rentre les listes via une boucle, je vais chercher là dedans; merci de l'éclaircissement.

    Sinon rien à voir, je vois que tu ouvres les fichiers en r et w , moi ça fonctionne qu'en rb et wb , pourquoi ça marche chez toi ?

  4. #4
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Points : 143
    Points
    143
    Par défaut
    A propos de ta question sur le r et rb, une citation de https://docs.python.org/2/tutorial/inputoutput.html

    On Windows, 'b' appended to the mode opens the file in binary mode, so there are also modes like 'rb', 'wb', and 'r+b'. Python on Windows makes a distinction between text and binary files; the end-of-line characters in text files are automatically altered slightly when data is read or written. This behind-the-scenes modification to file data is fine for ASCII text files, but it’ll corrupt binary data like that in JPEG or EXE files. Be very careful to use binary mode when reading and writing such files. On Unix, it doesn’t hurt to append a 'b' to the mode, so you can use it platform-independently for all binary files.
    Donc j'imagine que tu utilises Windows et plxpy un système de type Unix (Linux ou Mac OS X).

  5. #5
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Citation Envoyé par Biribibi
    et plxpy un système de type Unix (Linux ou Mac OS X).
    C'est le cas. En même temps, j'ai l'impression que ça ne devrait pas jouer (avec ou sans b) :

    Citation Envoyé par doc python pickle
    By default, the pickle data format uses a printable ASCII representation. This is slightly more voluminous than a binary representation.
    Mais bon, c'est "By default" ... Le mieux serait de disposer du code.
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  6. #6
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2014
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Si, sous windows, si je mets pas le b , ça me donne "Type Error, must be str not bytes", c'est bien ça, par défaut le mode w sauvegarde une chaine de caractères et pickle sauvegarde un truc moitié encodé :" €]q (]q(X TotoqKKKe]q(X TitiqKKKe]q(X TataqK KKee."

    Enfin c'etait pas mon problème, c'était juste pour info , ça vient de l'OS.

    Sinon pour ma liste de liste, je pense que c'est réglé, y'avait effectivement un dump mal placé dans un boucle au lieu d'en dehors.

    Merci pour vos réponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Regrouper une liste en liste de listes
    Par West01 dans le forum Prolog
    Réponses: 12
    Dernier message: 14/03/2008, 14h07
  2. Liste de liste?
    Par Bethoring dans le forum C++
    Réponses: 4
    Dernier message: 16/11/2005, 18h19
  3. Liste de listes
    Par SteelBox dans le forum Prolog
    Réponses: 5
    Dernier message: 16/10/2005, 16h21
  4. acceder au n iéme element d'une liste std::list
    Par sorari dans le forum SL & STL
    Réponses: 4
    Dernier message: 23/03/2005, 15h21
  5. [langage] tri avancé, liste de listes
    Par schnecke dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2004, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo