我正在循环浏览一个文件,如果我发现了什么,想在将控制权返回给主循环之前先读几行寻找内容。但是,我希望在我停止向前看时返回控制权。
示例代码:
for line in file:
line = line.strip()
llist = line.split()
if llist[0] == 'NUMS':
# some loop to read ahead and print nums on their own line
# until it finds END, then return control to the main for
# loop at the point where it stopped looking ahead.
示例输入:
NUMS
1
2
3
4
5
END
SOME
MORE
STUFF
NUMS
6
7
8
9
0
END
期望的输出:
1 2 3 4 5
6 7 8 9 0
我是Python的新手,所以如果有更好的方法除了使用循环前进之外,我很高兴看到它。
答案 0 :(得分:6)
如果你不需要,那么提前阅读并不是一个好主意,这就是这里的情况。您需要做的事情可以通过保持一位状态在单个for循环中完成。这个允许错误检查,扩展到更复杂的要求,而不是由同一迭代器上的嵌套循环处理。
guff = """NUMS
1
2
etc etc
9
0
END"""
state = ""
for item in guff.split():
if item == "NUMS":
if state == "NUMS": print "missing END"
state = "NUMS"
elif item == "END":
if state == "": print "missing NUMS"
state = ""
print
elif state == "NUMS":
print item,
if state == "NUMS": print # missing END
答案 1 :(得分:4)
当您循环打开文件时,您只能获得每行一次。这与列表不同,其中每个for循环将在整个列表中获得自己的迭代器。
你可以从文件中获取内部循环“窃取”行,这样外部循环就无法看到它们:
for line in file:
line = line.strip()
llist = line.split()
if llist and llist[0] == 'NUMS':
for line in file:
line = line.strip()
if line == 'END':
break
else:
print line,
print # newline
了解iterators的工作原理以获取更多信息。