Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lecture impossible d'un fichier

    2 octobre 2012 à 17:33:43

    Bonjour,

    J'ai tenté d'afficher des "noms de monstres" en parcourant un fichier "palierX". palierX varie entre "palier1" et "palier100", ici le but est de lire "palier1".

    class LancementJeu:
            def __init__(self, joueur):
                fichier = ("files/joueurs/{}").format(joueur)
                self.palierActuel = linecache.getline(fichier, 10) #La valeur de "palierActuel" est ici "1"
                
                fichier = ("files/monstre/palier{}").format(palierActuel) #Erreur ici => global name "palierActuel" is not defined
                fichier_read = open(fichier, "r")
                self.monstre = []
                for n in fichier_read:
                    self.monstre.append(n)
    


    Si quelqu'un à une idée, je ne comprend pas pourquoi j'ai cette erreur ...

    Merci pour votre aide ! :)
    • Partager sur Facebook
    • Partager sur Twitter
      2 octobre 2012 à 17:36:37

      palierActuel n'existe pas; par contre self.palierActuel ...
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        2 octobre 2012 à 17:42:55

        Oui, ça je viens de comprendre, mais ça vient pas de là, la valeur qui est censé être dans "self.palierActuel" n'existe pas, lorsque j'en fais un print, il n'y a rien, et pareil pour d'autres variables (que je n'ai pas affiché ici), pourtant mon fichier est bien existant, j'ai recompté le nombre de ligne pour voir si tout correspond etc ...
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          2 octobre 2012 à 19:44:31

          Bonjour,

          A mon avis, il faut fermer le fichier.
          • Partager sur Facebook
          • Partager sur Twitter
            2 octobre 2012 à 19:53:38

            Oui, c'est une bonne idée de ta part, mais ça n'a pas l'air d'arranger les choses, voici où j'en suis concrétement =>

            class LancementJeu:
                    def __init__(self, joueur):
                        fichier = ("files/joueurs/{}").format(joueur)
                        self.pseudo       = joueur
                        self.sexe         = linecache.getline(fichier, 2)
                        self.classe       = linecache.getline(fichier, 3)
                        self.level        = linecache.getline(fichier, 4)
                        self.xp           = linecache.getline(fichier, 5)
                        self.vieActuel    = linecache.getline(fichier, 6)
                        self.vieMax       = linecache.getline(fichier, 7)
                        self.force        = linecache.getline(fichier, 8)
                        self.defense      = linecache.getline(fichier, 9)
                        self.palierActuel = linecache.getline(fichier, 1)
                        self.palierMax    = linecache.getline(fichier, 11)
                        self.chapeau      = linecache.getline(fichier, 12)
                        self.cape         = linecache.getline(fichier, 13)
                        self.arme         = linecache.getline(fichier, 14)
                        self.bouclier     = linecache.getline(fichier, 15)
            
                        fichier = ("files/monstre/palier{}").format(self.palierActuel)
                        fichier_read = open(fichier, "r") #L'erreur se produit ici : IOError: [Errno 2] No such file or directory: 'files/monstre/palier'
                        self.monstre = []
                        for n in fichier_read:
                            self.monstre.append(n)
                        fichier_read.close()
            
                    def lancementJeu(self):
                        print self.monstre[0]
                        print self.palierActuel
                        print self.sexe
            


            L'erreur "IOError: [Errno 2] No such file or directory: 'files/monstre/palier'" ne devrait pas apparaître puisque ce n'est pas "palier" mais "palier1" qui devrait être créé, mais comme les variables n'ont rien en retour avec le linecache ...
            • Partager sur Facebook
            • Partager sur Twitter
              6 octobre 2012 à 16:16:08

              Je sais d'où vient mon problème, c'est comme si une variable contenant un linecache ne pouvait être réutilisé pour afficher un autre linecache.
              J'ai réécris mon code en beaucoup plus simplifié =>

              import linecache
              
              listeDesPrenoms = linecache.getline("listeDesPrenoms", 1)
              ficheDeChaquePrenom = linecache.getline(listeDesPrenoms, 1)
              print listeDesPrenoms #Résultat : Pierre
              print ficheDeChaquePrenom #Résultat : Aucun | Résultat qui devrait y avoir : Masculin
              


              J'espère que c'est plus compréhensif. Je tiens à préciser que le fichier "listeDesPrenoms" et "Pierre" sont bel et bien existant.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                6 octobre 2012 à 16:31:17

                Bonjour,

                linecache dans ton cas n'est pas vraiment utile étant donné que tu vas utiliser une centaine de chaînes au plus de ton fichier. ça va très vite pour python, donc un simple,

                with open("monfichier", "r") as f:
                    lines = [line.strip() for line in f.readlines()] # strip() pour supprimer les espaces avant et après la chaîne
                
                print(lines) # tu verras si ce format te convient
                
                print(lines[1]) # envoi la valeur sexe il me semble
                


                • Partager sur Facebook
                • Partager sur Twitter
                  6 octobre 2012 à 16:48:56

                  Merci pour ta réponse ! En effet, cela fonctionne très bien, mais retourne uniquement le "prenom".
                  Et le but est d'ouvrir le fichier "prenom" pour avoir accès au sexe, level etc ...

                  Sinon, pour ce qui est de linecache, tu as raison, ce n'est pas utile dans mon cas.

                  J'ai fais ceci à la place :

                  fichier_joueurs = open("fichiers","r")
                  pseudo = fichier_joueurs.readlines()[0]
                  
                  fichier_fiche = open(pseudo, "r")
                  sexe = fichier_fiche.readlines()[1]
                  level = fichier_fiche.readlines()[2]
                  # etc ...
                  
                  print pseudo
                  print sexe
                  print level
                  


                  Il y'a peut-être moyen de faire encore plus propre je pense.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    6 octobre 2012 à 18:08:49

                    Citation

                    Il y'a peut-être moyen de faire encore plus propre je pense.



                    Oui

                    C'est ce que je t'avais expliqué au départ

                    with open("monfichier", "r") as f:
                        lines = [line.strip() for line in f.readlines()]
                    
                    for i in xrange(3):
                        print lines[i]
                    


                    f.readlines() renvoi la liste de toutes les lignes du fichier, elle ne nécessite qu'une seule utilisation.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Lecture impossible d'un fichier

                    × 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