Я пытаюсь записать объект в сжатый файл json за один шаг (минимизация кода и, возможно, экономия памяти). Моя первоначальная идея (python3) была такой:
import gzip, json
with gzip.open("/tmp/test.gz", mode="wb") as f:
json.dump({"a": 1}, f)
Однако это не удается: 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)
однако мне не нравится текстовый режим. На мой взгляд (и, возможно, это неправильно, но поддерживается это), текстовый режим используется для исправления концов строк. Это не должно быть проблемой, потому что у json нет окончаний строк, но мне не нравится, что он (возможно) возится с моими байтами, он (возможно) медленнее, потому что ищет окончания строк для исправления, и (худшее из всех) я не понимаю, почему что-то в окончаниях строк исправляет мои проблемы с кодировкой?
str
объекты, а неbytes
объекты. Я думаю, что этот ответ хорошо объясняет это stackoverflow.com/questions/39450065/ json.dump действительно делает две вещи: сериализует ваш объект dict в строку, а затем записывает его в файл с кодировкой (аналогично file.write() ) 28.11.2018