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にはニックネームのリストがありますが、ファイルのすべての行を一度に印刷するにはどうすればよいですか。私が持っているコードは、最初のニックネームだけを出力します。よろしくお願いいたします。ありがとう。
まず、@ 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
ステートメントの内容をインデントする必要があります。
あなたはおそらく次のようなものを望みます:
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を取り除きました
あなたはこれを試すことができます。 (ファイルオブジェクトのイテレータを使用して)一度にすべての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
ファイルをループします。
f = open("masters.txt")
lines = f.readlines()
for line in lines:
print line
試しましたか
for line in open("masters", "r").readlines(): print line
?
readline()
一方、「行」のみを読み取ります
readlines()
行全体を読み取り、すべての行のリストを表示します。