如何输出文件python中的每一行

Sou*_*urD 12 python file input

     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()
Run Code Online (Sandbox Code Playgroud)

masters.txt有一个昵称列表,如何一次打印文件中的每一行?我只打印了第一个昵称的代码.你的帮助将是欣赏它.谢谢.

mgi*_*uca 25

首先,正如@ l33tnerd所说,f.close应该在for循环之外.

其次,你只是readline在循环之前调用一次.那只读第一行.诀窍在于,在Python中,文件充当迭代器,因此您可以迭代文件而无需在其上调用任何方法,这将为每次迭代提供一行:

 if data.find('!masters') != -1:
     f = open('masters.txt')
     for line in f:
           print line,
           sck.send('PRIVMSG ' + chan + " " + line)
     f.close()
Run Code Online (Sandbox Code Playgroud)

最后,你指的lines是循环内的变量; 我假设你打算参考line.

编辑:哦,你需要缩进if语句的内容.

  • 出于同样的原因,`sck.send()`最后可能不需要`'\ r \n'`. (3认同)
  • 另外,“打印行”的末尾应使用逗号,以避免出现双倍行距。 (2认同)

NG.*_*NG. 8

你可能想要这样的东西:

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')
Run Code Online (Sandbox Code Playgroud)

不要在每次循环和打印行而不是行时关闭它.还可以使用readlines来获取所有行.

EDIT删除了我的另一个答案 - 本次讨论中的另一个是比我的更好的替代方案,所以没有理由复制它.

还用read()剥离了\n.splitlines()

  • @SB:while循环和对f.readline的两次调用使得代码看起来像Pascal一样令人沮丧.只需使用`for line in f` (3认同)
  • 是的,我通常认为如果你可以毫不费力地使用O(1)就可以不使用O(N)内存. (2认同)

seg*_*ggy 5

你可以试试看。它不会一次(使用文件对象的迭代器)一次将所有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')
Run Code Online (Sandbox Code Playgroud)

如果您使用的是旧版本的python(2.6版之前),则必须

from __future__ import with_statement
Run Code Online (Sandbox Code Playgroud)


use*_*354 5

循环遍历文件。

f = open("masters.txt")
lines = f.readlines()
for line in lines:
    print line
Run Code Online (Sandbox Code Playgroud)