如何使用Python创建低内存的大型zip文件并将其上传到s3

时间:2019-05-29 20:51:26

标签: python amazon-web-services amazon-s3 aws-lambda boto3

我想下载s3文件列表并将其压缩为文件,但是文件列表可能非常大,并且占用大量内存空间。

立即的解决方案是下载所有文件,将其压缩并上传到s3

def upload_zip_file(event,context):
    s3 = boto3.client('s3')
    list_keys = event['list_keys']
    data_io = BytesIO()
    filename = "file.pdf"
    zf = zipfile.ZipFile(data_io, 'w')

    for key in list_keys:
        s3_object = s3.get_object(Bucket=DATA_BUCKET_NAME, Key=key)
        body = s3_object['Body'].read()
        zf.writestr(filename,body, compress_type=zipfile.ZIP_DEFLATED)

    zf.close()
    s3.upload_fileobj(data_io, ZIP_BUCKET_NAME, filename)

使用这种解决方案,当我下载所有数据时,zip文件的总大小存储在内存中,并且可以大于1 GB。如何在较小的部分上传zip文件,而没有达到完整尺寸?

0 个答案:

没有答案