回退iter(f.splitlines)一行

时间:2015-04-23 18:22:40

标签: python-2.7

我有以下脚本:

iterator = iter(f.splitlines())
for line in iterator:
    if "some_string" in line:
        next_line = next(iterator) # next line has some float/integer values
        if next_line == "some_value":
            do-something

我正在打开一个文件并在其中查找关键字。如果我找到它们,我会将下一行中出现的整数/浮点值附加到列表中。

问题是“for”循环将采用“next_line”之后的行。例如:

line1: "keyword"
line2: 3
line3: something-else
line4: keyword
line5: 4

如果我在line1中找到了我想要的东西并从line2中获取了ineger,那么“for-loop”将从第3行继续。如何从line1的最后一个位置继续(从line2继续,不管next_line是否接受了它) )?我想回一行。

1 个答案:

答案 0 :(得分:1)

听起来您希望使用itertools.tee来获取两个迭代器,这两个迭代器可以设置为彼此关闭的一个项目:

import itertools

it0, it1 = tee(f)   # no need for splitlines, just use the file object as an iterator

next(it1)   # throw away the first value from one of the iterators

for val0, val1 in zip(it0, it1):   # iterate in parallel
    if "some_string" in val0 and val1 == "some_value":
        do_stuff()