0

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

第 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
4

3 回答 3

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 的评论。

于 2013-04-17T15:47:12.560 回答
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))

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

于 2013-04-17T15:47:57.233 回答
1

将循环更改为:

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

变量“lines”是一个行列表,您可以使用“for l in lines”来遍历其中的每一行。变量“l”表示单行。

于 2013-04-17T15:44:52.697 回答