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
をその開始値に置き換えます。
お試しください。あなたの特定のエラーを指摘することは、あなたがすでに考え出したものを繰り返すことよりもはるかに生産的です。 –
このタスクを3つのサブタスクに分割することができます。最初に - マルチプロセッシングを使用してファイルを繰り返し、k番目の行を別々のファイルに格納し、2番目にすべてのファイルを1つに連結し、最後に2番目の出力と出力結果。 – vovaminiof
@vovaminiof:これはちょうど 'itertools'で簡単に解決できます。 –