一度に最大 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
行のタプルが続きます。ただし、これではファイル全体がメモリにロードされます。これを望まない場合(つまり、ファイルが非常に大きい場合)、ジェネレータ式を使用する別の解決策があります。islice
itertools パッケージから:
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 行 (ファイルにそれほど多くない場合はそれより少ない行) が提供されます。