我循环浏览一个文件,如果我发现了什么,想在将控制权返回给主循环之前先读几行寻找内容.但是,我希望在我停止向前看时返回控制权.
示例代码:
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.
Run Code Online (Sandbox Code Playgroud)
样本输入:
NUMS
1
2
3
4
5
END
SOME
MORE
STUFF
NUMS
6
7
8
9
0
END
Run Code Online (Sandbox Code Playgroud)
期望的输出:
1 2 3 4 5
6 7 8 9 0
Run Code Online (Sandbox Code Playgroud)
我是Python的新手,所以如果有一个更好的方法来做它除了使用循环前瞻,我很高兴看到它.
如果你不需要,那么提前阅读并不是一个好主意,这就是这里的情况.您需要做的事情可以通过保持一点状态在单个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
Run Code Online (Sandbox Code Playgroud)
当您循环打开的文件时,您只能获取每一行一次。这与列表不同,列表中每个 for 循环都会在整个列表上获得自己的迭代器。
\n\n您可以在文件中使用内部循环 \xe2\x80\x9csteal\xe2\x80\x9d 行,这样外部循环就看不到它们:
\n\nfor line in file:\n line = line.strip()\n llist = line.split()\n\n if llist and llist[0] == \'NUMS\':\n for line in file:\n line = line.strip()\n if line == \'END\':\n break\n else:\n print line,\n print # newline\nRun Code Online (Sandbox Code Playgroud)\n\n阅读迭代器如何工作以获取更多信息。
\n| 归档时间: |
|
| 查看次数: |
3326 次 |
| 最近记录: |