我正在尝试以下列格式输出文件中的句子:
第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
答案 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”意味着一行。