Я пытаюсь использовать пакеты bz2
и/или lzma
в python. Я пытаюсь сжать дамп базы данных в формате csv, а затем поместить его в файл zip
. Я заставил его работать с однократным сжатием с обоими пакетами.
Код для которого выглядит так:
with ZipFile('something.zip', 'w') as zf:
content = bz2.compress(bytes(csv_string, 'UTF-8')) # also with lzma
zf.writestr(
'something.csv' + '.bz2',
content,
compress_type=ZIP_DEFLATED
)
Когда я пытаюсь использовать добавочное сжатие, он создает файл .zip, который, когда я пытаюсь извлечь, продолжает рекурсивно выдавать какой-то архивный файл.
Код для которого выглядит так:
with ZipFile('something.zip', 'w') as zf:
compressor = bz2.BZ2Compressor()
content = compressor.compress(bytes(csv_string, 'UTF-8')) # also with lzma
zf.writestr(
'something.csv' + '.bz2',
content,
compress_type=ZIP_DEFLATED
)
compressor.flush()
Я просмотрел документацию, а также искал информацию о методах сжатия, и, кажется, нет исчерпывающей информации о том, что такое одноразовое и инкрементное сжатие.
something.csv.bz2
, но не вызовет ошибок с самим zip-файлом. Он должен распаковываться без проблем. Кстати, если вы хотите сохранить файл bz2 в zip-файле, используйтеZIP_STORED
. Фактически вы увеличиваете размер архива, если пытаетесь сжать его дважды. - person tdelaney   schedule 25.03.2015