如何使用Python循环读取文件中的文件?

ast*_*y13 6 python file

我循环浏览一个文件,如果我发现了什么,想在将控制权返回给主循环之前先读几行寻找内容.但是,我希望在我停止向前看时返回控制权.

示例代码:

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的新手,所以如果有一个更好的方法来做它除了使用循环前瞻,我很高兴看到它.

Joh*_*hin 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
Run Code Online (Sandbox Code Playgroud)


Pet*_*rin 5

当您循环打开的文件时,您只能获取每一行一次。这与列表不同,列表中每个 for 循环都会在整个列表上获得自己的迭代器。

\n\n

您可以在文件中使用内部循环 \xe2\x80\x9csteal\xe2\x80\x9d 行,这样外部循环就看不到它们:

\n\n
for 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\n
Run Code Online (Sandbox Code Playgroud)\n\n

阅读迭代器如何工作以获取更多信息。

\n

  • @astay:这与内部/外部无关。这段代码中只有一个迭代器。`for thing in <iterator>` 只是循环获取下一个事物,直到迭代器引发 StopIteration。您可以跳出循环并开始另一个循环,该循环将继续获取下一个内容。 (2认同)