Что такое лучший Zip-модуль Python для обработки больших файлов?

EDIT: В частности, скорость сжатия и извлечения.

Какие-либо предложения?

благодаря

Поэтому я сделал большой zip-файл с произвольным размером:

$ ls -l *zip -rw-r--r-- 1 aleax 5000 115749854 Nov 18 19:16 large.zip $ unzip -l large.zip | wc 23396 93633 2254735 

т.е. 116 МБ с 23,4 тыс. файлами в нем и приуроченными вещами:

 $ time unzip -d /tmp large.zip >/dev/null real 0m14.702s user 0m2.586s sys 0m5.408s 

это системная утилита unzip binary – без сомнения, как тонко настроенная и оптимизированная, как чистый C-исполняемый файл. Затем (после очистки / tmp; -) …:

 $ time py26 -c'from zipfile import ZipFile; z=ZipFile("large.zip"); z.extractall("/tmp")' real 0m13.274s user 0m5.059s sys 0m5.166s 

… и это Python с его стандартной библиотекой – немного более требовательным к процессорному времени, но более 10% быстрее в реальном, то есть прошедшее время.

Конечно, вы можете повторить такие измерения, конечно (на вашей конкретной платформе – если это плохой процессор, например, медленный ARM-чип, то дополнительные требования Python к процессорному времени могут в конечном итоге сделать его медленнее – и ваши конкретные интересующие zip-файлы , так как каждый большой zipfile будет иметь совсем другой микс и, вполне возможно, производительность). Но для меня это говорит о том, что для создания расширения Python не так много места намного быстрее, чем старый старый zipfile – поскольку Python использует его, он использует чистую C, включенную в систему unzip! -)

Для обработки больших файлов без их загрузки в память используйте новые потоковые методы в версии zipfile версии Python 2.6, например ZipFile.open . Не используйте extract или extractall если вы не сильно дезинфицировали имена файлов в ZIP-файле.

(Вам приходилось read все байты в памяти или взломать его, как zipstream , теперь это устарело).