如何在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 文件里有一堆昵称,我想一次性把文件里的每一行都打印出来。可是我现在的代码只打印了第一个昵称。希望能得到你的帮助。谢谢!
5 个回答
6
你可以试试这个方法。它不会一次性把文件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
9
你可能想要这样的代码:
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来获取所有的行。
编辑 我把之前的回答删掉了 - 这个讨论中的另一个回答比我之前的更好,所以没必要重复。
另外,用read().splitlines()可以去掉行末的\n符号。
30
首先,正如@l33tnerd所说,f.close
应该放在循环外面。
其次,你只在循环之前调用了一次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
语句的内容加上缩进。