it-swarm.com.ru

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

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

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 __== '__main__':
    main()  

Проблема в том, что все мои файлы не сжимаются! Файлы имеют одинаковый размер, и, фактически, только расширение изменяется на ".Zip" (в данном случае от ".xls").

Я использую python 2.5 на winXP sp2.

53
Ramy

Это связано с тем, что 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 __== '__main__':
    main()  
114
Chinmay Kanchi

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

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

Например:

import shutil

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

Более подробную документацию можно посмотреть по адресу: Здесь

6
Gavriel Cohen