модуль 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 __name__ == '__main__':
    main()  

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

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

2 51

2 ответа:

это так 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()  

есть очень простой способ сжать ,

используют 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