web-dev-qa-db-fra.com

comment afficher chaque ligne d'un fichier python

     if data.find('!masters') != -1:
         f = open('masters.txt')
         lines = f.readline()
         for line in lines:
               print lines
               sck.send('PRIVMSG ' + chan + " " + str(lines) + '\r\n')
               f.close()

masters.txt a une liste de pseudonymes, comment puis-je imprimer chaque ligne du fichier à la fois ?. Le code que j'ai n'affiche que le premier pseudo. Votre aide sera l'apprécier. Merci.

9
SourD

Tout d’abord, comme @ l33tnerd l’a dit, f.close devrait être en dehors de la boucle for.

Deuxièmement, vous n’appelez qu'une seule fois readline, avant la boucle. Cela ne lit que la première ligne. Le truc, c'est qu'en Python, les fichiers agissent comme des itérateurs. Vous pouvez donc parcourir le fichier sans avoir à appeler de méthodes, ce qui vous donnera une ligne par itération:

 if data.find('!masters') != -1:
     f = open('masters.txt')
     for line in f:
           print line,
           sck.send('PRIVMSG ' + chan + " " + line)
     f.close()

Enfin, vous faisiez référence à la variable lines dans la boucle; Je suppose que vous vouliez parler de line.

Edit: Oh, et vous devez mettre en retrait le contenu de la déclaration if.

23
mgiuca

Vous voulez probablement quelque chose comme: 

if data.find('!masters') != -1:
     f = open('masters.txt')
     lines = f.read().splitlines()
     f.close()
     for line in lines:
         print line
         sck.send('PRIVMSG ' + chan + " " + str(line) + '\r\n')

Ne la fermez pas à chaque itération de la boucle et imprimez une ligne plutôt que des lignes. Également utiliser des lignes de lecture pour obtenir toutes les lignes.

EDITa supprimé mon autre réponse - l'autre dans cette discussion est une meilleure alternative que celle que j'avais, alors il n'y a aucune raison de la copier.

Supprimez également le\n avec read (). Splitlines ()

7
NG.

Tu pourrais essayer ça. Il ne lit pas tout le f en mémoire en même temps (à l'aide de l'itérateur de l'objet fichier) et ferme le fichier lorsque le code quitte le bloc with.

if data.find('!masters') != -1:
    with open('masters.txt', 'r') as f:
        for line in f:
            print line
            sck.send('PRIVMSG ' + chan + " " + line + '\r\n')

Si vous utilisez une version plus ancienne de python (avant la version 2.6), vous devrez

from __future__ import with_statement
4
seggy

Faites une boucle dans le fichier.

f = open("masters.txt")
lines = f.readlines()
for line in lines:
    print line
2
user2154354

As-tu essayé

for line in open("masters", "r").readlines(): print line

?

readline() 

lit seulement "une ligne", d'autre part

readlines()

lit des lignes entières et vous donne une liste de toutes les lignes.

0
Serdar Dalgic