2016-12-07 1 views
1

タイトルと同じ - 繰り返し構造を持つ多数の非常に大きなテキストファイル(> 10GB)があります。私はいくつかの情報をフィルタリングして、k番目のラインをすべて出力したいと思いますが、同時にすべてのラインを繰り返していきたいと思います。私はitertools:isliceとizipを試しましたが、一緒に置くことはできません。Python:多数の大きなファイルを同時に繰り返し、すべてのk番目の行を取得します。

+1

お試しください。あなたの特定のエラーを指摘することは、あなたがすでに考え出したものを繰り返すことよりもはるかに生産的です。 –

+0

このタスクを3つのサブタスクに分割することができます。最初に - マルチプロセッシングを使用してファイルを繰り返し、k番目の行を別々のファイルに格納し、2番目にすべてのファイルを1つに連結し、最後に2番目の出力と出力結果。 – 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をその開始値に置き換えます。

関連する問題