Почему модуль tarfile не допускает сжатое добавление? - PullRequest
0 голосов
/ 11 сентября 2018

Нет прямого способа добавить в сжатый архив tar.В документации указано :

Обратите внимание, что 'a:gz', 'a:bz2' или 'a:xz' невозможны.

В качестве обходного пути вывы можете использовать режим несжатого добавления 'a', а затем самостоятельно обрабатывать сжатие и декомпрессию, или вы можете самостоятельно выполнить добавление и использовать сжатые режимы чтения / записи для воссоздания архива tar.

Мой вопрос:Почему это должно быть так сложно?Есть ли какая-то причина, по которой вы можете подумать, почему разработчики решили не включать сжатый режим добавления в код?

1 Ответ

0 голосов
/ 11 сентября 2018

Потому что это сложно, особенно если вы хотите, чтобы он все еще хорошо сжимался при добавлении небольших файлов.

Вы можете посмотреть gzlog , как эффективно добавлять небольшие строки в файл gzip.Он добавляет их в несжатом виде, пока не будет достигнут порог, после чего несжатые данные будут сжаты.После каждого добавления у вас есть действительный файл gzip.

Чтобы сделать это с файлом tar, вам также нужно будет отслеживать завершающие блоки в несжатом потоке .tar и записывать поверх них, добавляя новые завершающие блоки.каждый раз.

Это можно сделать, но для правильной работы потребуется особое внимание к каждому формату сжатых данных.Если все сделано неправильно и если используется часто, результат будет ужасно неэффективным как по времени, так и по степени сжатия.

...