2016-12-07 46 views
1

正如標題 - 我有許多非常大的文本文件(> 10GB)具有相同的重複結構。我想過濾一些信息,所以我想從它們中產生每一行第k行,但同時對它們進行迭代。我已經嘗試itertools:islice和izip,但我不能把它們放在一起...Python:同時迭代許多大文件,獲得每第k行

+1

請包括您的嘗試;指出你的具體錯誤要比重複你已經想出的東西更有效率。 –

+0

你可以把這個任務分成三個子任務,首先 - 使用多重處理遍歷文件,並將第k行保存到單獨的文件中,其次 - 將所有文件連接成一個文件,最後,第三步 - 遍歷第二步輸出和產出結果。 – vovaminiof

+0

@vovaminiof:然而這只是'itertools'的簡單解決方法。 –

回答

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替換爲該起始值。