2017-05-11 7 views
0

私はxyzの軌跡ファイルをたくさん読んでいます。これらのファイルは、時間枠に対応する情報がN行に格納されるように構成されています。Pythonで同時にN行のファイルを読む

私は次のようにイテレータ書きたいと思います:

file=open(...) 
for line in file: 
    analyze(line) 

が、一度にN行を読み取るを:

file=Myopen(...,N=n) 
for Nlines in file: 
    analyze(Nlines) 

ファイルが巨大なので、私はに全体を読みたくありませんメモリ、 しかし、目的は、効率を得ることではなく、きれいで再利用可能なコードを作ることです。もちろん、インデックス%N == 0をチェックして、それが真のときには、 を分析できますが、私はその数行を何度も何度も何度も繰り返し書きました...

コメントと答えは高く評価されています!例えば

+1

あなたが見たいかもしれません:http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks – ozgur

答えて

0

:あなたがないファイルを処理する必要がない場合は

def grouper(iterable, n, fillvalue=None): 
    "Collect data into fixed-length chunks or blocks" 
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx" 
    args = [iter(iterable)] * n 
    return zip_longest(*args, fillvalue=fillvalue) 

file=Myopen(...,N=n) 
Nlines = [] 
for i in range(N): 
    Nlines.append(file.readline) 
analyze(''.join(Nlines)) 
0

itertools documentationが何をしたいんジェネレータ関数のレシピを持っています正確に3行の倍数であれば、ちょっと単純化してコード内で直接for nlines in zip(*[file]*5)を使うことができます。

関連する問題