2024-06-16 07:09:57 发布
网友
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有一个昵称列表,如何一次打印文件中的每一行?。我的代码只打印第一个昵称。谢谢你的帮助。谢谢。
你可能想要这样的东西:
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()
首先,正如@l33tnerd所说,f.close应该在for循环之外。
f.close
其次,在循环之前,您只调用readline一次。只有第一行。诀窍在于,在Python中,文件充当迭代器,因此您可以在文件上迭代,而不必调用任何方法,这将为每次迭代提供一行:
readline
if data.find('!masters') != -1: f = open('masters.txt') for line in f: print line, sck.send('PRIVMSG ' + chan + " " + line) f.close()
最后,您指的是循环中的变量lines;我假设您指的是line。
lines
line
编辑:噢,您需要缩进if语句的内容。
if
你可以试试这个。它不会一次将所有f读入内存(使用file对象的迭代器),并且在代码离开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
你可能想要这样的东西:
不要在循环和打印行(而不是行)的每次迭代中关闭它。也可以使用readlines获取所有行。
编辑删除了我的另一个答案-此讨论中的另一个答案比我的答案更好,因此没有理由复制它。
也用read()剥离了.splitlines()
首先,正如@l33tnerd所说,
f.close
应该在for循环之外。其次,在循环之前,您只调用
readline
一次。只有第一行。诀窍在于,在Python中,文件充当迭代器,因此您可以在文件上迭代,而不必调用任何方法,这将为每次迭代提供一行:最后,您指的是循环中的变量
lines
;我假设您指的是line
。编辑:噢,您需要缩进
if
语句的内容。你可以试试这个。它不会一次将所有f读入内存(使用file对象的迭代器),并且在代码离开with块时关闭文件。
如果您使用的是较旧版本的python(2.6之前的版本),则必须
相关问题 更多 >
编程相关推荐