Readlines输出for循环中的所有句子

时间:2013-04-17 15:42:15

标签: python counter readline

我正在尝试以下列格式输出文件中的句子:

第1行:第一句,
第2行:第二句,
第3行:第三句,

然而,我输入的代码正在回馈:

第1行:所有句子,
第2行:所有句子,

我不知道readline是否存在问题,或者它是否在for循环中,是否有人可以提供帮助?我已经包含了下面的脚本

import re, sys

f = open('findallEX.txt', 'r')

lines = f.readlines()

for l in lines:
    sys.stdout.write('line %s: %s' %(ii, lines))

    ii = ii + 1

print l

3 个答案:

答案 0 :(得分:3)

对于它的价值,你可以更简单地编写代码:

with open('findallEX.txt') as f:
     for ii,line in enumerate(f):
         sys.stdout.write('line %s: %s' %(ii,line))

with语句是执行以下 1 的一种奇特方式:

f = open(...)
#stuff inside with block
f.close()

另外,请注意您可以直接迭代文件对象。不推荐使用readlines()(并在python3.x中删除)。最后,python提供了enumerate函数,用于在迭代时保持计数器。如果您复制/粘贴代码,则还会删除代码所具有的NameError,因为您在实际定义代码之前使用ii


1 实际上,with做的远远不止于此。它还确保即使在代码块引发异常的情况下也能正确关闭文件。请参阅Martijn的评论,以获得更正确的翻译。

答案 1 :(得分:2)

将您的代码更改为此。

with open('findallEX.txt') as f:
    for line_num, line_text in enumerate(f):
        sys.stdout.write('line %d: %s' % (line_num, line_text))

如果您不确定上面使用的方法:

答案 2 :(得分:1)

将循环更改为:

for l in lines:
    sys.stdout.write('line %s: %s' %(ii, l))
    ii = ii + 1

变量“lines”是一个行列表,您使用“for l in lines”来遍历其中的每一行。而变量“l”意味着一行。