EDIT: Spécifiquement les vitesses de compression et d'extraction.Quel est le meilleur module Zip Python pour gérer des fichiers volumineux?
Avez-vous des suggestions?
Merci
EDIT: Spécifiquement les vitesses de compression et d'extraction.Quel est le meilleur module Zip Python pour gérer des fichiers volumineux?
Avez-vous des suggestions?
Merci
donc j'ai fait un grand aléatoire ish zipfile:
$ ls -l *zip
-rw-r--r-- 1 aleax 5000 115749854 Nov 18 19:16 large.zip
$ unzip -l large.zip | wc
23396 93633 2254735
-à-dire, 116 Mo avec des fichiers 23.4K en elle, et les choses chronométrés:
$ time unzip -d /tmp large.zip >/dev/null
real 0m14.702s
user 0m2.586s
sys 0m5.408s
c'est le binaire Unzip de la ligne de commande fourni par le système - sans aucun doute aussi bien réglé et optimisé qu'un pur C exécutable peut être. Ensuite (après le nettoyage/tmp; -) ...:
$ time py26 -c'from zipfile import ZipFile; z=ZipFile("large.zip"); z.extractall("/tmp")'
real 0m13.274s
user 0m5.059s
sys 0m5.166s
... et c'est Python avec sa bibliothèque standard - un peu plus exigeant du temps CPU, mais plus de 10% plus rapide en temps réel, que est, temps écoulé. Bien sûr, vous pouvez répéter de telles mesures (sur votre plate-forme spécifique - si elle est faible en termes de CPU, par exemple une puce ARM lente, les demandes supplémentaires de Python en termes de temps CPU peuvent ralentir - et votre des fichiers zip spécifiques d'intérêt, puisque chaque fichier zip volumineux aura un mix très différent et très probablement des performances). Mais ce que cela me suggère est qu'il n'y a pas beaucoup d'espace pour construire une extension Python beaucoup plus vite que le bon vieux zipfile
- puisque Python l'utilisant bat le pur-C, système inclus unzip! -)
Merci pour votre analyse, il a été le plus utile. – Duck
@Duck, de rien! –
Ce serait bien de voir des mesures d'utilisation de la mémoire aussi. +1 de toute façon. –
Pour manipuler des fichiers volumineux sans les charger en mémoire, utilisez les nouvelles méthodes basées sur les flux dans la version Python 2.6 de zipfile
, telle que ZipFile.open
. Ne pas utiliser extract
ou extractall
sauf si vous avez fortement assaini les noms de fichiers dans le ZIP.
(Vous avez l'habitude d'avoir à read
tous les octets en mémoire, ou pirater autour d'elle comme zipstream;. C'est désormais obsolète)
avez-vous comparé la performance de zipfile à celle de l'utilisation zip/décompressez directement dans le coquille? –