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.
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
.
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 ()
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
Faites une boucle dans le fichier.
f = open("masters.txt")
lines = f.readlines()
for line in lines:
print line
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.