cómo generar cada línea en un archivo 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 tiene una lista de apodos, ¿cómo puedo imprimir todas las líneas del archivo a la vez? El código que tengo solo imprime el primer apodo. Tu ayuda será apreciada. Gracias.

En primer lugar, como dijo @ l33tnerd, f.close debería estar fuera del bucle for.

En segundo lugar, solo está llamando a readline una vez, antes del bucle. Eso solo lee la primera línea. El truco es que en Python, los archivos actúan como iteradores, por lo que puede recorrer el archivo sin tener que llamar a ningún método, y eso le dará una línea por iteración:

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

Finalmente, te referías a las lines variables dentro del bucle; Supongo que querías referirte a la line .

Edit: Ah, y necesitas sangrar el contenido de la sentencia if .

Probablemente quieras algo como:

 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') 

No cierre cada iteración del bucle e imprima la línea en lugar de las líneas. También usa readlines para obtener todas las líneas.

EDIT eliminó mi otra respuesta; la otra en esta discusión es una alternativa mejor que la que tenía, por lo que no hay razón para copiarla.

También se eliminó el \ n con read (). Splitlines ()

Podrías intentar esto. No lee todo f en la memoria a la vez (utilizando el iterador del objeto de archivo) y cierra el archivo cuando el código deja el bloque 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 está usando una versión anterior de python (pre 2.6) tendrá que tener

 from __future__ import with_statement 

Recorre el archivo.

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

Has probado

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

?

 readline() 

Sólo lee “una línea”, por otro lado

 readlines() 

lee líneas enteras y le da una lista de todas las líneas.