一度にN行ずつファイルを読み取るにはどうすればいいですか? [重複] 質問する

一度にN行ずつファイルを読み取るにはどうすればいいですか? [重複] 質問する

一度に最大 N 行を EOF まで読み取って、大きなファイルを読み取る必要があります。Python でこれを行う最も効果的な方法は何ですか? たとえば次のようになります。

with open(filename, 'r') as infile:
    while not EOF:
        lines = [get next N lines]
        process(lines)

ベストアンサー1

1 つの解決策は、リストの内包表記とスライス演算子を使用することです。

with open(filename, 'r') as infile:
    lines = [line for line in infile][:N]

この後にはlines行のタプルが続きます。ただし、これではファイル全体がメモリにロードされます。これを望まない場合(つまり、ファイルが非常に大きい場合)、ジェネレータ式を使用する別の解決策があります。isliceitertools パッケージから:

from itertools import islice
with open(filename, 'r') as infile:
    lines_gen = islice(infile, N)

lines_genはジェネレーター オブジェクトであり、ファイルの各行を提供し、次のようにループで使用できます。

for line in lines_gen:
    print line

どちらのソリューションでも、最大 N 行 (ファイルにそれほど多くない場合はそれより少ない行) が提供されます。

おすすめ記事