1
正如標題 - 我有許多非常大的文本文件(> 10GB)具有相同的重複結構。我想過濾一些信息,所以我想從它們中產生每一行第k行,但同時對它們進行迭代。我已經嘗試itertools:islice和izip,但我不能把它們放在一起...Python:同時迭代許多大文件,獲得每第k行
正如標題 - 我有許多非常大的文本文件(> 10GB)具有相同的重複結構。我想過濾一些信息,所以我想從它們中產生每一行第k行,但同時對它們進行迭代。我已經嘗試itertools:islice和izip,但我不能把它們放在一起...Python:同時迭代許多大文件,獲得每第k行
鑑於您談論使用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
替換爲該起始值。
請包括您的嘗試;指出你的具體錯誤要比重複你已經想出的東西更有效率。 –
你可以把這個任務分成三個子任務,首先 - 使用多重處理遍歷文件,並將第k行保存到單獨的文件中,其次 - 將所有文件連接成一個文件,最後,第三步 - 遍歷第二步輸出和產出結果。 – vovaminiof
@vovaminiof:然而這只是'itertools'的簡單解決方法。 –