在上传到Google Storage之前如何压缩Json

时间:2018-08-13 13:31:51

标签: python json google-cloud-storage

我正在使用以下代码(Python 2.7)将其上传到Google Storage:

import datalab.storage as storage
storage.Bucket('MyBucket').item(path_raw).write_to(json.dumps(data), 'application/json')

这很好。但是,我想以压缩方式上传文件,以便占用更少的空间。 json.dumps()没有压缩选项,只能使用类似的东西:

with gzip.GzipFile('filename.json', 'w') as outfile:
        outfile.write(json.dumps(data, outfile, sort_keys=True))

无法解决我的问题,因为它需要将文件保存在本地,然后在我的代码直接在Google存储设备上创建文件时上传。

我该如何解决?

2 个答案:

答案 0 :(得分:1)

您可以写入内存中的缓冲区而不是磁盘上的文件:

from io import BytesIO
import gzip
stream = BytesIO()
with gzip.GzipFile(fileobj=stream, mode='w') as gz:
    gz.write("some string")

# Reset stream
stream.seek(0)
print(stream.read())

如果您可以直接使用zlib,那么您也可以使用:

import zlib
zlib.compress(data)

答案 1 :(得分:0)

然后您可能会寻找gzip.compress。因此,您可以将其放在您的数据库中:

gzip.compress(bytes(json.dumps(data), encoding="utf-8"))

(这仅适用于Python3。)