使用Python 3.5
我正在解压缩一个gzip文件,并将其写入另一个文件。在查找内存不足问题时,我在gzip模块的文档中找到了一个示例:
import gzip
import shutil
with open('/home/joe/file.txt', 'rb') as f_in:
with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
这段代码实现了压缩功能,我需要解压缩,因此我认为只需反转模式即可,如下所示:
with open(unzipped_file, 'wb') as f_out, gzip.open(zipped_file, 'rb') as f_in:
shutil.copyfileobj(f_in, f_out)
我的问题是,为什么我在以下代码中遇到了内存问题:
with gzip.open(zipped_file, 'rb') as zin, open(unzipped_file, 'wb') as wout:
wout.write(zin.read())
我可能是在最后一根稻草上趴着,或者我天真地认为这些文件会像生成器一样流式解压过程,占用非常少的内存。这两种方法是否等效?
shutil.copyfileObj
方法的代码。 - Vinit Kumarprint(type(zin.read()))
。 - Robᵩcopyfileobj
函数使用文件对象,并在内部执行类似于file.read(blocksize)
和file.write(chunk)
的读写操作。从这个意义上说,使用copyfileobj
可能并不比直接使用read
和write
方法提供显著的优势。 - undefined