4GB の非常に大きなファイルがあり、それを読み込もうとするとコンピュータがハングします。そのため、ファイルを少しずつ読み込み、各部分を処理した後、処理した部分を別のファイルに保存し、次の部分を読み取りたいと思っています。
yield
これらの作品には何か方法があるのでしょうか?
怠惰な方法があればいいのですが。
ベストアンサー1
遅延関数を書くには、次のようにします。yield
:
def read_in_chunks(file_object, chunk_size=1024):
"""Lazy function (generator) to read a file piece by piece.
Default chunk size: 1k."""
while True:
data = file_object.read(chunk_size)
if not data:
break
yield data
with open('really_big_file.dat') as f:
for piece in read_in_chunks(f):
process_data(piece)
もう一つの選択肢はiter
ヘルパー関数:
f = open('really_big_file.dat')
def read1k():
return f.read(1024)
for piece in iter(read1k, ''):
process_data(piece)
ファイルが行ベースの場合、ファイル オブジェクトはすでに行の遅延ジェネレーターです。
for line in open('really_big_file.dat'):
process_data(line)