EDIT: Spezifische Kompression und Extraktion Geschwindigkeiten.Was ist das beste Python-Zip-Modul für große Dateien?
Irgendwelche Vorschläge?
Dank
EDIT: Spezifische Kompression und Extraktion Geschwindigkeiten.Was ist das beste Python-Zip-Modul für große Dateien?
Irgendwelche Vorschläge?
Dank
Also machte ich eine zufällige-ish große Zip-Datei:
$ ls -l *zip
-rw-r--r-- 1 aleax 5000 115749854 Nov 18 19:16 large.zip
$ unzip -l large.zip | wc
23396 93633 2254735
dh 116 MB mit 23.4K-Dateien in das und zeitlich Dinge:
$ time unzip -d /tmp large.zip >/dev/null
real 0m14.702s
user 0m2.586s
sys 0m5.408s
dies Die vom System zur Verfügung gestellte Kommandozeilen-Unzip-Binärdatei - ohne Zweifel so fein abgestimmt und optimiert wie eine reine C-Programmdatei sein kann. Dann (nach Reinigung/tmp; -) ...:
$ time py26 -c'from zipfile import ZipFile; z=ZipFile("large.zip"); z.extractall("/tmp")'
real 0m13.274s
user 0m5.059s
sys 0m5.166s
... und das ist Python mit seiner Standard-Bibliothek - einem wenig anspruchsvollen CPU-Zeit, aber mehr als 10% schneller in real, dass ist abgelaufene Zeit.
Natürlich können Sie solche Messungen natürlich wiederholen (auf Ihrer speziellen Plattform - wenn es CPU-arm ist, z. B. ein langsamer ARM-Chip, dann könnte Pythons zusätzliche CPU-Zeit dazu führen, dass es langsamer wird) spezifische ZIP-Dateien von Interesse, da jede große Zip-Datei eine sehr unterschiedliche Mischung und möglicherweise Leistung haben wird). Aber das schlägt mir vor, dass es nicht so viel Platz gibt, um eine Python-Erweiterung viel schneller zu bauen als das gute alte zipfile
- da Python es mit dem pure-C, system-included entpackt! -)
Vielen Dank für Ihre Analyse, es war sehr hilfreich. – Duck
@Duck, gern geschehen! –
Es wäre schön, auch Speicherverbrauchsmessungen zu sehen. +1 sowieso. –
Für Wenn Sie große Dateien verarbeiten, ohne sie in den Arbeitsspeicher zu laden, verwenden Sie die neuen strombasierten Methoden in Python 2.6s Version zipfile
, z. B. ZipFile.open
. Verwenden Sie nichtextract
oder extractall
, es sei denn, Sie haben die Dateinamen im ZIP stark bereinigt.
(Sie verwendet read
alle Bytes in den Speicher zu haben oder hacken um ihn herum wie zipstream;. Dies ist mittlerweile veraltet)
Sie die Leistung von zipfile zu der mit Reißverschluss verglichenen/dekomprimieren direkt in die Schale? –