python tempfile+gzip+json转储

2024-09-23 06:26:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用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'

有什么想法吗


Tags: inpyimportjsondatausraswith
1条回答
网友
1楼 · 发布于 2024-09-23 06:26:33

Gzip对象没有文本模式。因此,我将创建一个包装器作为filehandle对象传递。此包装器从json获取数据,并将其编码为二进制,以写入gzip文件:

class wrapper:
    def __init__(self,gzout):
        self.__handle = gzout
    def write(self,data):
        self.__handle.write(data.encode())

这样使用:

json.dump(data, wrapper(gzout))

每当json.dump想要写入对象时,就会调用wrapper.write方法,该方法将文本转换为二进制并写入二进制流

(来自io模块的一些内置包装器可能也适合,但此实现简单且有效)

相关问题 更多 >