Как кодеки сжатия работают в Python?

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

Мой код выглядит так:

log_file = codecs.open(archive_file, 'w', 'bz2')
for id, f1, f2, f3 in cursor:
    log_file.write('%s %s %s %s\n' % (id, f1 or 'NULL', f2 or 'NULL', f3))

Однако мой выходной файл имеет размер 1 409 780. Запуск bunzip2 в файле приводит к созданию файла размером 943 634, а запуск bzip2 в результате дает размер 217 275. Другими словами, несжатый файл значительно меньше, чем файл, сжатый с использованием кодека Python bzip. Есть ли способ исправить это, кроме запуска bzip2 в командной строке?

Я попробовал кодек gzip Python (изменив строку на codecs.open (archive_file, 'a + ',' zip ') ), чтобы проверить, решила ли она проблему. Я все еще получаю большие файлы, но я также получаю ошибку gzip: archive_file: not in gzip format , когда пытаюсь распаковать файл. Что там происходит?


РЕДАКТИРОВАТЬ : Изначально файл был открыт в режиме добавления, а не записи. Хотя это может быть, а может и не быть проблемой, вопрос все еще остается открытым, если файл открыт в режиме 'w'.

8
задан Chris B. 29 September 2010 в 19:51
поделиться