如何在 python、内存中 (AWS Lambda) 将 ZIP 转换为 GZIP

How to convert ZIP to GZIP in python, in-memory (AWS Lambda)

我已经成功地将 zip 文件转换为 gzip,使用 AWS lambda 的本地存储 /tmp。问题是此存储空间最大为 500Mb。

def zip_to_gzip(zip):

    # Unzip <filename>.zip
    zfile = ZipFile(zip)
    filename = zfile.namelist()[0]
    data = zfile.read(filename)
    f = open('/tmp/' + str(filename), 'wb')
    f.write(data)
    f.close()

    # Compress <filename>.gzip
    gzip_file = gzip.open(
        f'/tmp/{filename}.gz', 'wb')
    gzip_file.write(data)
    gzip_file.close()

我想只在 RAM 中执行此操作,而不使用任何本地 storage/hard 驱动器。

有什么想法吗? io 模块似乎不适合这种用途(虽然我不是 100% 确定)

这应该按照你的要求去做:

#!/usr/bin/env python3

import gzip

# Make 10kB of compressible zeroes of data
data = bytearray(10240)

outfilename = 'sample.gz'
with gzip.open(outfilename, 'wb') as output:
     output.write(data)

改编自 Doug Hellman 的优秀作品 PYMOTW

检查结果

# The size is 52 bytes:
ls -l sample.gz
-rw-r--r--  1 mark  staff  52  7 Feb 17:51 sample.gz

# The type is correct
file -b --mime  sample.gz
application/gzip; charset=binary

# It decompresses to the correct size 
gunzip < sample.gz | wc -c
10240