Partage
  • Partager sur Facebook
  • Partager sur Twitter

readline() n'affiche que les premiers caractères ?

Sujet résolu
    4 mars 2013 à 19:44:13

    Bonjour,

    Dans l'optique de faire un jeu d'aventure en texte, je cherche à afficher le contenu d'un fichier .txt qui contient les descriptions des lieux.

    Un lieu, une ligne.

    En cherchant, j'ai trouvé readline() et le module linecache. J'ai aussi vu plusieurs références à ces deux là dans des discussions du forum, mais dans des exemples assez complexes pour moi qui dépassent mon entendement pour l'instant.

    Le module linecache fonctionne, et dans le code i-dessous, j'ai bien la seconde ligne à l'écran.

    Cependant j'aimerais comprendre, si readlines() (au pluriel) affiche bien tout le fichier, readline() (au singlulier) n'affiche que les premiers caractères. Si je mets par exemple readline(2), j'ai les deux premières lettres au lieu d'avoir la seconde ligne (ou la troisième ? Ca commence à 0 ou 1 ?). Si je ne mets rien dans les parenthèses, j'ai la première ligne complète qui s'affiche.

    fichier1 = open("dudtxt1.txt", "r")
    
    #~ dud=fichier1.readline()
    #~ fichier1.close()
    
    #~ import linecache
    #~ dud=linecache.getline("dudtxt1.txt", 2)
    
    print (dud)
    




    • Partager sur Facebook
    • Partager sur Twitter
      4 mars 2013 à 21:30:59

      readline([size]) lit le fichier à partir de là où il est rendu jusqu'à ce qu'il trouve une fin de ligne ou qu'il ai lut size octets.

      line1 = file.readline()
      line2 = file.readline()
      line3 = file.readline()
      ...
      

      -
      Edité par PyTony 4 mars 2013 à 21:32:20

      • Partager sur Facebook
      • Partager sur Twitter
      Envie de mettre les mains dans le cambouis ? Passez à Funtoo GNU/Linux. DO IT!
        5 mars 2013 à 9:21:46

        loc_bat = open("loc_bat.txt", "r")
        
        maison=loc_bat.readline()
        chateau=loc_bat.readline()
        prison=loc_bat.readline()
        jardin=loc_bat.readline()
        ecurie=loc_bat.readline()
        
        loc_bat.close()
        
        print (prison)
        print (ecurie)
        print (jardin)
        print (maison)
         
        

        s'affiche comme ceci (c'est juste un fichier de test, la ligne "prison" contient seulement "Une prison".) :

        Pourquoi des sauts de ligne quand j'appelle un texte qui n'est pas dans l'ordre du fichier loc_bat ?

        Le f.close() se place bien ici, pas à la fin du programme ou j'sais pas où ?

        Une prison
        
        Une écurie
        Un jardin
        
        Une maison
        
        
        
        ------------------
        (program exited with code: 0)
        Press return to continue
        

        Aussi, quelle méthode est plus adaptée pour faire ça ? Readline(), linecache, autre chose ?

        -
        Edité par Tchey 5 mars 2013 à 9:22:47

        • Partager sur Facebook
        • Partager sur Twitter
          5 mars 2013 à 10:15:36

          La méthode print ajoute un retour à la ligne automatiquement à la fin. Pour modifier ce comportement par défaut je t'invite à consulter help(print). De plus chaque ligne de ton fichier se termine par un retour à la ligne (logique) sauf la dernière. Il y a donc deux retours à la ligne quand tu fais print. Sauf pour écurie qui est la dernière ligne.

          • Partager sur Facebook
          • Partager sur Twitter
          Envie de mettre les mains dans le cambouis ? Passez à Funtoo GNU/Linux. DO IT!
            5 mars 2013 à 11:35:39

            D'acc ! Merci du coup de pouce.
            • Partager sur Facebook
            • Partager sur Twitter

            readline() n'affiche que les premiers caractères ?

            × 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