Python:同时迭代许多大文件,得到每个第k行

时间:2016-12-07 15:30:13

标签: python itertools

在标题中 - 我有许多非常大的文本文件(> 10GB)具有相同的重复结构。我想过滤掉一些信息,所以我想从它们那里得到每一条第k行但是同时迭代它们。我尝试过itertools:islice和izip,但我不能把它们放在一起......

1 个答案:

答案 0 :(得分:2)

鉴于你谈到使用itertools.izip(),我假设你在这里使用Python 2.

使用itertools.islice()来帮助从文件中跳过行,itertools.izip_longest() function可以懒惰地并行读取并处理较短的文件:

from itertools import islice, izip_longest

filenames = [fname1, fname2, fname3]
open_files = [open(fname) for fname in filenames]
kth_slice_files = (islice(f, None, None, k) for f in open_files)
try:
    for kth_lines in izip_longest(*kth_slice_files, fillvalue=''):
        # do something with those combined lines

islice(fileobj, None, None, k)将从第一个行开始,然后跳过k - 1行,为您提供1 + k,然后是1 + 2 * k等行。如果您需要从稍后的行开始,请将第一个None替换为该起始值。