そのため、かなり巨大な .gz ファイルがいくつかあります。解凍すると、それぞれ 10 ~ 20 GB になります。
それらの各行をループする必要があるため、標準を使用しています:
import gzip
f = gzip.open(path+myFile, 'r')
for line in f.readlines():
#(yadda yadda)
f.close()
ただし、コマンドopen()
とclose()
コマンドはどちらも AGES を使用し、メモリ + CPU の 98% を使用します。プログラムが終了Killed
して端末に出力されるほどです。たぶん、抽出されたファイル全体をメモリにロードしていますか?
私は今、次のようなものを使用しています:
from subprocess import call
f = open(path+'myfile.txt', 'w')
call(['gunzip', '-c', path+myfile], stdout=f)
#do some looping through the file
f.close()
#then delete extracted file
これは機能します。しかし、よりクリーンな方法はありますか?