Подтвердить что ты не робот

Модуль zipfile python, похоже, не сжимает мои файлы

Я сделал небольшую вспомогательную функцию:

import zipfile

def main(archive_list=[],zfilename='default.zip'):
    print zfilename
    zout = zipfile.ZipFile(zfilename, "w")
    for fname in archive_list:
        print "writing: ", fname
        zout.write(fname)
    zout.close()

if __name__ == '__main__':
    main()  

Проблема в том, что все мои файлы НЕ СКАЗЫВАЮТСЯ! Файлы имеют одинаковый размер, и, фактически, только расширение изменяется на ".zip" (отсюда ".xls" в этом случае).

Я запускаю python 2.5 на winXP sp2.

4b9b3361

Ответ 1

Это связано с тем, что ZipFile требует указания метода сжатия. Если вы не укажете его, предполагается, что метод сжатия будет zipfile.ZIP_STORED, который сохраняет файлы только без их сжатия. Вам нужно указать метод zipfile.ZIP_DEFLATED. Для этого вам необходимо установить модуль zlib (обычно он устанавливается по умолчанию).

import zipfile

def main(archive_list=[],zfilename='default.zip'):
    print zfilename
    zout = zipfile.ZipFile(zfilename, "w", zipfile.ZIP_DEFLATED) # <--- this is the change you need to make
    for fname in archive_list:
        print "writing: ", fname
        zout.write(fname)
    zout.close()

if __name__ == '__main__':
    main()  

Ответ 2

Существует очень простой способ сжатия формата 'zip file',

Использовать в библиотеке shutil.make_archive.

Например:

import shutil

shutil.make_archive(file_name, 'zip', file location after compression)

Можно просмотреть более обширную документацию по адресу: https://docs.python.org/2/library/shutil.html#shutil.make_archive