Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonctions simulant le module Pickle G.Swinnen

Aide sur un exercice

Sujet résolu
    28 avril 2011 à 2:45:46

    Bonjour, je réalise un exercice dont voici l'énoncé:

    Écrivez des fonctions qui effectuent le même travail que celles du module pickle (voir page 121).
    Ces fonctions doivent permettre l’enregistrement de variables diverses dans un fichier texte, en les accompagnant systématiquement d’informations concernant leur format exact.

    Voici ma solution:

    import os
    os.chdir("/Users/Asimov/Desktop")
    
    def save(donnees):
    
        i = 0
        liste = []
        
        f = open("fichier.txt", "a")
    
        liste.append(donnees)
    
        while i < len(liste):
    
            f.write(str(liste[i])+ " ")
            f.write(str(type(donnees)) + "\n")
    
            i += 1
    
        f.close()
    
    def load():
    
        f = open("fichier.txt", "r")
    
        while 1:
    
            ligne = f.readline()
    
            if ligne == "":
                break
    
            print(ligne, end= "")
    
        f.close()
    
    save(10)
    load()
    


    Alors, effectivement j'enregistre bien des variables diverses dans un fichier texte en les accompagnant d'informations concernant leur format, mais je ne pense pas :lol: que j'effectue le même travail que le module Pickle.

    Je souhaiterais donc avoir votre avis et éventuellement des pistes pour réaliser correctement cet exercice.

    Je remercie par avance quiconque me viendrait en aide.

    Ps: J'ai lu plusieurs sujets traitant de cet exercice mais ils utilisent des méthodes ou for..in ou encore même des dictionnaires, je n'en suis pas là pour le moment et donc ces solutions ne me conviennent pas.


    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      28 avril 2011 à 11:11:26

      Tu peux utiliser le try - except apparemment dans le même chapitre pour ouvrir un fichier. D'ailleurs mieux que except utilise except IOError.

      Le plus important pour ton exercice c'est d'avoir fait les précédents qui te donnent les démarches pour arriver à l'exercice final, c'est à dire le tiens.

      :)
      • Partager sur Facebook
      • Partager sur Twitter
        29 avril 2011 à 6:46:11

        Moi j'ai fait une total refonte de ton code...
        Comme tu n'en est pas encore à la POO j'ai utilisé des globales.

        import os
        os.chdir("/Users/Asimov/Desktop")
        
        def save(donnees, fichier):
            global compteur, liste
            liste.append(donnees)
        
            fichier.write(str(liste[compteur])+ " " + str(type(liste[compteur])) + "\n")
            compteur += 1
            
        def load(fichier):
            global compteur2, liste2
            
            for ligne in fichier:
                liste2.append(ligne)
                
            print(liste2[compteur2])
            compteur2 += 1
        
        f = open("fichier.txt", "r+")
        compteur, compteur2 = 0, 0
        liste, liste2  = [], []
        


        Ce code est censé être utilisé en console, comme dans le 3eme exemple de swinnen à la page 112 (et non 121 :-° ) avec le module pickle.
        • Partager sur Facebook
        • Partager sur Twitter
          29 avril 2011 à 10:06:31

          Merci à vous fred1599 et Kamiyuzuki pour vos réponses. :)

          Kamiyuzuki: Lorsque j'appelle la fonction save() dans la console les données ne s'enregistre pas dans mon fichier texte elles le font seulement après appel de la fonction load().

          A quoi cela est t-il dû ?
          • Partager sur Facebook
          • Partager sur Twitter
            30 avril 2011 à 8:46:08

            C'est surement parce-que la fonction save() ne referme pas le fichier...
            • Partager sur Facebook
            • Partager sur Twitter
              30 avril 2011 à 10:30:29

              En fait les fichiers ont un buffer (tampon) qui regroupe les données avant de les envoyer à l'OS pour écriture, pour éviter d'appeler l'OS à chaque fois que tu fais write(). Donc les données sont encore dans le tampon.

              Ferme le fichier ou utilise la méthode fichier.flush() qui vide le tampon.
              • Partager sur Facebook
              • Partager sur Twitter

              Fonctions simulant le module Pickle G.Swinnen

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown