web-dev-qa-db-ja.com

ファイルのすべての行を出力する方法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にはニックネームのリストがありますが、ファイルのすべての行を一度に印刷するにはどうすればよいですか。私が持っているコードは、最初のニックネームだけを出力します。よろしくお願いいたします。ありがとう。

14
SourD

まず、@ l33tnerdが言ったように、f.closeはforループの外になければなりません。

次に、ループの前にreadlineを1回だけ呼び出します。これは最初の行だけを読み取ります。トリックは、Pythonではファイルがイテレータとして機能するため、メソッドを呼び出さなくてもファイルを反復処理できるため、反復ごとに1行が得られます。

 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ステートメントの内容をインデントする必要があります。

24
mgiuca

あなたはおそらく次のようなものを望みます:

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 [〜#〜]私の他の回答を削除しました-このディスカッションの他の回答は私が持っていたものよりも優れているため、コピーする理由はありません。

また、read()。splitlines()を使用して\ nを取り除きました

8
NG.

あなたはこれを試すことができます。 (ファイルオブジェクトのイテレータを使用して)一度にすべての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
5
seggy

ファイルをループします。

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

試しましたか

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

readline() 

一方、「行」のみを読み取ります

readlines()

行全体を読み取り、すべての行のリストを表示します。

1
Serdar Dalgic