我的问题是我的输入文件包含空行(这是必须的),但当它到达空行时,:for i, line in enumerate(file):
停止读取文件。我该如何防止这种情况。?
文件的读取是这样的,因为除了最后一行的其他内容之外,我需要对文件的最后一行执行某些操作。 (这也是必须的。)
以下是我要做的事情:
with open(sys.argv[1]) as file:
i = 0
for i, line in enumerate(file):
# Do for all but last line
if i < linecount-1:
print "Not last line"
i += 1
# Do for last line
if i == linecount-1:
print "Last line"
在没有空行的文件上工作正常。
答案 0 :(得分:2)
您无需在代码中声明或增加i
。 enumerate
为你做到了。另外增加你可能会意外触发你的条件;它与空行无关。
答案 1 :(得分:-1)
您的实现中的错误在另一个答案中解释,但为了实现我认为您想要做的事情,最好按如下方式处理,然后您不需要事先知道文件的长度:
import sys
def process_regular_line(line):
print 'regular line', line
def process_last_line(line):
print 'last line:', line
with open(sys.argv[1]) as file:
last_line = file.readline()
while True:
this_line = file.readline()
if not this_line:
process_last_line(last_line)
break
process_regular_line(last_line)
last_line = this_line
例如,在包含5行的测试文件中:
a line
another line
a line after a blank line
The last ever line
你得到:
regular line: a line
regular line: another line
regular line:
regular line: a line after a blank line
last line: The last ever line