Итак, у меня есть довольно гигантские .gz файлы - мы говорим от 10 до 20 g каждый при распаковке.
Мне нужно пропустить каждую строку из них, поэтому я использую стандарт:
import gzip
f = gzip.open(path+myFile, 'r')
for line in f.readlines():
#(yadda yadda)
f.close()
Однако обе команды open()
и close()
принимают AGES, используя 98% памяти + CPU. Настолько, что программа выходит и выводит 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
Это работает. Но есть ли более чистый способ?