【发布时间】:2013-01-17 08:05:16
【问题描述】:
所以我有一些相当大的 .gz 文件——解压后每个文件 10 到 20 GB。
我需要遍历它们的每一行,所以我使用的是标准:
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
这行得通。但是有更清洁的方法吗?
【问题讨论】:
-
你确定是
open而不是readlines会永远持续吗?
标签: python gzip subprocess gunzip