Ответ 1
Это работает в смысле создания и поддержки действительного файла gzip, поскольку формат gzip позволяет объединить потоки gzip.
Однако это не работает в том смысле, что вы получаете паршивое сжатие, поскольку вы даете каждому экземпляру сжатия gzip так мало данных для работы. Сжатие зависит от использования предыстории предыдущих данных, но здесь gzip практически отсутствует.
Вы можете либо a) накапливать по меньшей мере несколько K данных, многие из ваших строк, перед вызовом gzip для добавления в файл другого потока gzip или b) сделать что-то гораздо более сложное, которое добавляется к одному потоку gzip, оставляя действительный поток gzip каждый раз и разрешая эффективное сжатие данных.
Вы найдете пример b) в C, в gzlog.h и gzlog.c. Я не считаю, что Python имеет все интерфейсы для zlib, необходимые для реализации gzlog непосредственно в Python, но вы можете подключиться к C-коду из Python.