文章目录
工作中需要将大批的数据,压缩为zip存储。按照传统的处理办法需要将数据先存储到本地磁盘,再从磁盘读文件压缩成zip文件。
传统方法需要多次磁盘IO,性能很低,如果跳过文件存储,直接将内存的数据压缩保存,会大大减少磁盘IO,提升性能。
不需要看解析的,可以直接看最后完整的python代码
创建一个类: InMemoryZIP(), 来处理所有的程序。
class InMemoryZIP(object):
一 init() 创建一个类文件对象
def __init__(self):
# create the in-memory file-like object
self.in_memory_zip = BytesIO()
二 append() 内存数据添加到zip对象
def append(self, filename_in_zip, file_contents):
""" Appends a file with name filename_in_zip \
and contents of file_contents to the in-memory zip.
"""
# create a handle to the in-memory zip in append mode\
if not isinstance(file_contents, bytes):
file_contens = bytes(str(file_contens), encoding='utf-8')
# write the file to the in-memory zip
zf = zipfile.ZipFile(self.in_memory_zip, 'a', zipfile.ZIP_DEFLATED, False)
zf.writestr