有没有办法将`json.dump`和`gzip`一起使用?
问题内容:
这是有关如何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()方法想要将字节对象传递给它。根据文档,
json模块总是产生str对象,而不是byte对象。因此,fp.write()必须支持str输入。
有没有一种方法来包装json
串输出为字节,这样GzipFile
的write()
将处理它?还是使用该方法json.dumps
并将encode()
结果字符串转换为bytes对象的唯一方法,如其他链接的答案一样?
问题答案:
gzip模块提供了开箱即用的支持:只需声明一种编码,它将unicode字符串编码为字节,然后再将其写入文件:
with gzip.open(write_file, 'wt', encoding="ascii") as zipfile:
json.dump(data, zipfile)
确保使用文本模式('wt'
)指定。
由于json对任何非ascii字符进行了编码,因此ascii编码就足够了,但是您可以对前128个代码点使用与ascii兼容的任何其他编码,例如Latin1,UTF-8等