我想使用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'
有什么想法吗?
尝试一下:
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
范围时被删除,因此您必须在该范围内处理它。
您的数据是文本,您需要一次将gzip文件作为文本打开:
with gzip.GzipFile(mode="w", fileobj=fout) as gzout: