как вывести каждую строку в файле 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) + 'rn')
               f.close()

мастеров.txt имеет список ников, как я могу распечатать каждую строку из файла сразу?. Код, который у меня есть, печатает только первое прозвище. Ваша помощь будет признателен. Спасибо.

5 ответов


во-первых, как сказал @l33tnerd,f.close должно быть вне цикла for.

во-вторых, вы только называете readline один раз, перед циклом. Это только первая строка. Хитрость в том, что в Python файлы действуют как итераторы, поэтому вы можете перебирать файл без необходимости вызывать какие-либо методы на нем, и это даст вам одну строку на итерацию:

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

наконец, вы имели в виду переменную lines внутри цикла; я предполагаю, что вы имели в виду, чтобы обратиться к line.

Edit: О, и вам нужно отступить содержимое if заявление.


вы, вероятно, хотите что-то вроде:

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

Не закрывайте его каждую итерацию цикла и печатайте строку вместо строк. Также используйте readlines, чтобы получить все строки.

редактировать удален мой другой ответ - другой в этом обсуждении является лучшей альтернативой, чем то, что у меня было, поэтому нет причин копировать его.

также снял \n с помощью read ().splitlines()


вы можете попробовать это. Он не считывает все f в память сразу (используя итератор файлового объекта) и закрывает файл, когда код покидает блок 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')

Если вы используете более старую версию python (pre 2.6), вам нужно будет иметь

from __future__ import with_statement

цикл через файл.

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

ты

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

?

readline() 

только читает "строку", с другой стороны

readlines()

читает целые строки и дает вам список всех строк.