如何在Python中输出文件的每一行

15 投票
5 回答
138760 浏览
提问于 2025-04-16 10:05
     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语句的内容加上缩进。

撰写回答