如何通过2次迭代推进for循环?

LWZ*_*LWZ 2 python file-io for-loop python-3.x

我正在阅读一个大文本文件,我需要从特定行读取一个数字.该文件如下所示:

....
unknown number of lines
....
ABCD
some random stuff
a number I want to read
....
....
Run Code Online (Sandbox Code Playgroud)

我想从"签名"行之后的2行读取数字ABCD,这是唯一的.现在我正在做的是:

with open(filename,'r') as f:
  for line in f:
    if line.rstrip('\n') == 'ABCD':
      continue
Run Code Online (Sandbox Code Playgroud)

但是continue只能通过1次迭代推进for循环.那么,我怎样才能使它再推进一次迭代以获得我真正需要的线?

Jim*_*ard 6

你可以显式调用nextf*(该for循环通常不会给你),推进迭代,然后调用continue:

for line in f:
    if line.rstrip('\n') == 'ABCD':
        next(f)
        continue
    print(line)
Run Code Online (Sandbox Code Playgroud)

现在将打印:

....

unknown number of lines

....

a number I want to read

....

....
Run Code Online (Sandbox Code Playgroud)

从而跳过'ABCD''some random stuff'.

在您确定一般情况下ABCD不是最后的元素,这应该不会造成问题.但是,如果你想保持安全,可以将它包装在一个try - except以捕获StopIteration异常.


*在这种情况下,这是有效的,因为f它是自己的iteratorie iter(f) is f.一般情况下,情况并非如此,对于列表,迭代器是它自己的独特对象,list_iterator因此像这样推进它是行不通的.