json.dump到python 3中的gzip文件

Cla*_*ude 13 python-3.x

我试图在一个步骤中将对象写入gzip压缩的json文件(最小化代码,并可能节省内存空间).我最初的想法(python3)是这样的:

import gzip, json
with gzip.open("/tmp/test.gz", mode="wb") as f:
  json.dump({"a": 1}, f)
Run Code Online (Sandbox Code Playgroud)

然而TypeError: 'str' does not support the buffer interface,这失败了:我认为这与字符串没有被编码为字节有关.那么这样做的正确方法是什么?

我不满意的当前解决方案:

以文本模式打开文件可以解决问题:

import gzip, json
with gzip.open("/tmp/test.gz", mode="wt") as f:
  json.dump({"a": 1}, f)
Run Code Online (Sandbox Code Playgroud)

但是我不喜欢文本模式.在我看来(也许这是错误的,但受此支持),文本模式用于修复行尾.这不应该是一个问题,因为json没有行结尾,但我不喜欢它(可能)搞乱我的字节,它(可能)更慢,因为它正在寻找行结束来修复,并且(最坏的)所有)我不明白为什么关于行结尾的东西修复了我的编码问题?

Cla*_*ude 4

offtopic:我应该比最初更深入地研究文档。

\n\n

python 文档显示:

\n\n
\n

通常,文件以文本模式打开,这意味着您从文件中读取字符串或向文件中写入字符串,这些字符串以特定编码(默认为 UTF-8)进行编码。附加到模式的“b”以二进制模式打开文件:现在数据以字节对象的形式读取和写入。此模式应用于所有不包含文本的文件。

\n
\n\n

我不完全同意 json 编码的结果是一个字符串(我认为它应该是一组字节,因为它明确定义它使用 utf-8 编码),但我之前注意到了这一点。所以我猜是文本模式。

\n