как вывести каждую строку в файл python - PullRequest
11 голосов
/ 17 января 2011
     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 содержит список псевдонимов, как я могу напечатать каждую строку из файла сразу? Код у меня печатает только первый ник. Ваша помощь будет признательна. Благодаря.

Ответы [ 5 ]

23 голосов
/ 17 января 2011

Во-первых, как сказал @ 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.

Редактировать: Да, и вам нужно сделать отступ в содержании оператора if.

7 голосов
/ 17 января 2011

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

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, чтобы получить все строки.

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

Также удаляет \ n с помощью read (). Splitlines ()

4 голосов
/ 17 января 2011

Вы можете попробовать это. Он не считывает все 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 (до 2.6), вам потребуется

from __future__ import with_statement
3 голосов
/ 04 апреля 2013

Перебрать файл.

f = open("masters.txt")
lines = f.readlines()
for line in lines:
    print line
0 голосов
/ 17 января 2011

Вы пробовали

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

?

readline() 

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

readlines()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...