модуль 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 ответа:
это так
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