Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sauvegarder et Charger des données d'un CSV

Erreur lors du chargement des données.

Sujet résolu
    15 juillet 2013 à 4:41:02

    Bonjour!
    J'ai un projet de score à programmer et le principal sujet se trouve lors de la sauvegarde et le chargement des données enregistrées...

    Tout d'abord, dans le programme principal j'enregistre mes données sur un csv de cette manière:

    import [...]
    
    name=input("Entrez nom de sauvegarde: ")
    Save=[name,i,setA,setB,jeuxA,jeuxB,pointA,pointB]
    fichier=open("savesscore.csv","a")
    csv = csv.writer(fichier)
    csv.writerow(Save)
    fichier.close()

    Vous l'aurez compris, j'enregistre mes données un certain ordre de tel sorte que le nom du joueur est l'index.

    Je retrouve donc dans le fichier Savesscore.csv

    toto,1,0,0,4,5,1,2
    
    matthew,1,0,0,1,0,1,1
    

    Plus tard, lorsque l'on redémarre le jeu, on demande que faire: Jouer ou charger une partie.

    Voici la partie du chargement: On cherche à afficher les différentes parties sauvegardées et on demande le nom de la précédente partie pour montrer le set en cours.

        fichier=open("savestennis.csv","r")
        csv = csv.reader(fichier)
        for row in csv:
            try:
                print(row[0],"=",row[1],",",row[2],",",row[3],",",row[4],",",row[5],",",row[6],",",row[7])
            except IndexError:
                pass
        name=input("Entrez nom de la précédente sauvegarde: ")
        for row in csv:
            if(row[0]==name):
                seti=row[1]
                setA=row[2]
                setB=row[3]
                jeuxA=row[4]
                jeuxB=row[5]
                pointA=row[6]
                pointB=row[7]
        fichier.close()
        print(seti)

           Or voici ce que cela m'affiche:

    Que faire? Jouer(J) ou Charger une Partie(C)?: C
    toto = 1 , 0 , 0 , 4 , 5 , 1 , 2
    matthew = 1 , 0 , 0 , 1 , 0 , 1 , 1
    Entrez nom de la précédente sauvegarde: matthew
    Traceback (most recent call last):
      File "C:/Python32/saves/tennis/tennisp.py", line 136, in <module>
        print(seti)
    NameError: name 'seti' is not defined

     J'ai cherché l'erreur ou comment faire sur plusieurs sites avant de m'inscrire sur celui ci. Quelqu'un peut-il m'aider? merci d'avance...


    -
    Edité par adnbenji 15 juillet 2013 à 4:43:41

    • Partager sur Facebook
    • Partager sur Twitter
      15 juillet 2013 à 8:33:51

      Salut,
      Le fichier a été parcouru une première fois pour afficher les lignes.
      Il faut se replacer au début avant de le reparcourir pour extraire une ligne particulière :
      fichier.seek(0)


      • Partager sur Facebook
      • Partager sur Twitter
        15 juillet 2013 à 8:53:35

        Merci beaucoup, mon problème est résolu! Une dernière question, tu saurais pas par hasard comment faire pour démarrer le range d'un for à partir d'une variable?

        Dans le style:

        for i in range(variable, 4)

        parce que ça m'affiche une erreur... Merci encore! 

        • Partager sur Facebook
        • Partager sur Twitter
          15 juillet 2013 à 9:00:23

          C'est bon, j'ai résolu mon problème!
          • Partager sur Facebook
          • Partager sur Twitter
            15 juillet 2013 à 9:06:42

            La syntaxe est bonne, mais je pense que la variable est de type string. Il faut la convertir en entier:
            int(variable)
            • Partager sur Facebook
            • Partager sur Twitter
              15 juillet 2013 à 10:36:09

              Désolé... je vais t'embêter une dernière fois: Pourquoi j'obtiens l'erreur ci dessous lorsque je veux re-sauvegarder les données dans le même fichier?

              Erreur:

              Traceback (most recent call last):
                File "C:\Python32\saves\tennis\tennisp.py", line 174, in <module>
                  csv = csv.writer(fichier)
              AttributeError: '_csv.reader' object has no attribute 'writer'

              Code du chargement:

              fichier=open("savesscore.csv","r")
                  csv = csv.reader(fichier)
                  for row in csv:
                      try:
                          print(row[0],"=",row[1],",",row[2],",",row[3],",",row[4],",",row[5],",",row[6],",",row[7])
                      except IndexError:
                          pass
                  name=input("Entrez nom de la précédente sauvegarde: ")
                  fichier.seek(0)
                  for line in csv:
                      try:
                          if(line[0]==name):
                              seti=int(line[1])
                              setA=int(line[2])
                              setB=int(line[3])
                              jeuxA=int(line[4])
                              jeuxB=int(line[5])
                              pointA=int(line[6])
                              pointB=int(line[7])
                      except IndexError:
                          pass
                  fichier.close()

              Code de la sauvegarde:

              elif(G[1]=="I"):
                                      name=input("Entrez nom de sauvegarde: ")
                                      Save=[name,i,setA,setB,jeuxA,jeuxB,pointA,pointB]
                                      fichier=open("savestennis.csv","a")
                                      csv = csv.writer(fichier)
                                      #writera.seek(0)
                                      csv.writerow(Save)
                                      fichier.close()

              J'ai essayer:

              -de modifier les noms de variable

              -de mettre seek(0)

              -de ne pas fermer le fichier après le chargement

              Merci encore..

              • Partager sur Facebook
              • Partager sur Twitter
                15 juillet 2013 à 11:11:37

                Apparemment, tu as nommé par csv :
                csv = csv.reader(fichier)
                
                J'aurais fait plutôt my_reader.

                Du coup, lorsque tu crées un reader :
                csv = csv.writer(fichier)
                
                ce n'est pas le nom du module, mais celui de l'objet créé.



                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  15 juillet 2013 à 11:14:13

                  +1 azertymen

                  Attention de ne pas écraser les mots clé, ainsi que module, fonction, ...

                  -
                  Edité par Anonyme 15 juillet 2013 à 11:18:36

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 juillet 2013 à 11:41:17

                    J'ai réussi, en effet, en renommant la variable "csv" utilisé dans le reader du chargement en "my_reader" et renommer celle de la sauvegarde en "my_writer" à évité au programme de penser que "csv.writer(fichier)" était en fait le module d'une variable! Merci encore!

                    Et fred, "w" supprime toute les données du fichier pour y insérer les nouvelles, or ce n'est pas ce que je veux, j'utilise donc Append...

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Sauvegarder et Charger des données d'un CSV

                    × 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