Предположение о том, что режим добавления будет добавляться к существующему потоку, неверно.Вместо этого он объединяет новый поток в существующий файл gzip.При распаковке они прозрачно объединяются, как если бы вы сжимали один файл.Но каждый поток содержит свой собственный верхний и нижний колонтитулы , и они складываются.Проверка вашего файла показывает
% hexdump -C output.gz|head -n5
00000000 1f 8b 08 08 2e e7 03 5b 02 ff 6f 75 74 70 75 74 |.......[..output|
00000010 00 33 e0 02 00 12 cd 4a 7e 02 00 00 00 1f 8b 08 |.3.....J~.......|
00000020 08 2e e7 03 5b 02 ff 6f 75 74 70 75 74 00 33 e4 |....[..output.3.|
00000030 02 00 53 fc 51 67 02 00 00 00 1f 8b 08 08 2e e7 |..S.Qg..........|
00000040 03 5b 02 ff 6f 75 74 70 75 74 00 33 e2 02 00 90 |.[..output.3....|
Обратите внимание на повторение магического числа 1f 8b
, отмечающего начало нового потока.
В общем случае, повторять открытиефайл в режиме добавления в цикле.Вместо этого откройте файл один раз для записи и запишите содержимое в цикле:
with gzip.open('output.gz', 'wb') as f:
for idx in range(100000):
line = (str(idx) + '\n').encode()
f.write(line)
Полученный файл имеет размер около 200 КБ по сравнению с исходными 3 МБ.