Модуль Python Zipfile, кажется, не сжимает мои файлы - PullRequest
53 голосов
/ 12 ноября 2010

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

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.

Ответы [ 2 ]

115 голосов
/ 12 ноября 2010

Это потому, что 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()  
6 голосов
/ 22 октября 2017

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

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

Например:

import shutil

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

Можно увидеть большеобширная документация по адресу: Здесь

...