python临时文件+ gzip + json转储

问题描述 投票:0回答:2

我想使用python3(3.5)将很大的字典转储到压缩的json文件中。

import gzip
import json
import tempfile

data = {"verylargedict": True}

with tempfile.NamedTemporaryFile("w+b", dir="/tmp/", prefix=".json.gz") as fout:
    with gzip.GzipFile(mode="wb", fileobj=fout) as gzout:
        json.dump(data, gzout)

虽然我遇到这个错误。

Traceback (most recent call last):
  File "test.py", line 13, in <module>
    json.dump(data, gzout)
  File "/usr/lib/python3.5/json/__init__.py", line 179, in dump
    fp.write(chunk)
  File "/usr/lib/python3.5/gzip.py", line 258, in write
    data = memoryview(data)
TypeError: memoryview: a bytes-like object is required, not 'str'

有什么想法吗?

python json python-3.x gzip temporary-files
2个回答
0
投票

尝试一下:

import gzip
import json
import tempfile

data = {"verylargedict": True}

with tempfile.NamedTemporaryFile("w+b", dir="/tmp/", prefix=".json.gz") as fout:
    with gzip.GzipFile(mode="wb", fileobj=fout) as gzout:
        gzout.write(json.dumps(data).encode('utf-8'))

请注意,临时文件在离开with范围时被删除,因此您必须在该范围内处理它。


0
投票

您的数据是文本,您需要一次将gzip文件作为文本打开:

with gzip.GzipFile(mode="w", fileobj=fout) as gzout:
© www.soinside.com 2019 - 2024. All rights reserved.