您可以使用配方推进文件的迭代-itertools
consume()
因为它很快(它使用itertools
函数来确保迭代发生在低级代码中,使得消耗值的过程非常快,并通过存储消耗的值来避免耗尽内存值):
from itertools import islice
import collections
def consume(iterator, n):
"Advance the iterator n-steps ahead. If n is none, consume entirely."
# Use functions that consume iterators at C speed.
if n is None:
# feed the entire iterator into a zero-length deque
collections.deque(iterator, maxlen=0)
else:
# advance to the empty slice starting at position n
next(islice(iterator, n, n), None)
通过这样做,您可以执行以下操作:
with open("file.txt") as file:
for i, line in enumerate(file, 1):
...
if not i % 2:
consume(file, 2) # Skip 2 lines ahead.
我们使用enumerate()
来计算我们的进度,并每两行向前跳过(请注意,在跳过的值之后enumerate()
添加数字,这意味着它不会根据需要计算跳过的值)。
这是一个很好的解决方案,因为它完全避免了任何 Python 循环跳过的值,将它们完全删除。