Here是关于如何使用json.dumps
写入gzip文件的绝佳答案。我想要做的是使用dump
方法将json直接序列化为GzipFile
对象。
示例代码:
import gzip, json
data = # a dictionary of data here
with gzip.open(write_file, 'w') as zipfile:
json.dump(data, zipfile)
引发的错误是
TypeError: memoryview: a bytes-like objet is required, not 'str'
我认为这是因为gzip write()方法需要传递给它的字节对象。根据{{3}},
json模块总是生成str对象,而不是字节对象。 因此,fp.write()必须支持str输入。
有没有办法将json
字符串输出包装为字节,以便GzipFile
' s write()
能够处理它?或者是将json.dumps
和encode()
生成的字符串用于字节对象的唯一方法,就像在另一个链接的答案中一样?
答案 0 :(得分:6)
gzip模块支持开箱即用:只需声明一个编码,它会在将unicode字符串写入文件之前将其编码为字节:
with gzip.open(write_file, 'wt', encoding="ascii") as zipfile:
json.dump(data, zipfile)
确保使用文字模式('wt'
)指定。
由于json编码了任何非ascii字符,ascii编码就足够了,但你可以使用ascii与前面的128个代码点兼容的任何其他编码,如Latin1,UTF-8等
答案 1 :(得分:0)
将字符串转换为字节数组,您可以执行类似这样的操作
json.dump(bytes(data,"utf-8"), zipfile)