Модуль 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.
Ответы
Ответ 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