2013-04-22 6 views
10

Gibt es eine deutlich schnellere Alternative zu Python 2.7.4 Zipfile-Modul (mit ZIP_DEFLATED) zum Zippen einer großen Anzahl von Dateien in eine einzige Zip-Datei? Ich habe mir die czipfile https://pypi.python.org/pypi/czipfile/1.0.0 angesehen, aber diese scheint sich auf eine schnellere Entschlüsselung (nicht Komprimierung) zu konzentrieren.Schnellere Alternative zu Pythons Zipfile-Modul?

Ich muss routinemäßig eine große Anzahl von Bilddateien (~ 12.000 Dateien einer Kombination von .exr und .tiff-Dateien) mit jeder Datei zwischen ~ 1MB - 6MB Größe (und ~ 9 GB für alle Dateien) verarbeiten) in eine einzige Zip-Datei für den Versand. Dieses Zippen dauert ca. 90 Minuten (läuft unter Windows 7 64bit).

Wenn jemand ein anderes Python-Modul (oder alternativ eine C/C++ - Bibliothek oder sogar ein eigenständiges Tool) empfehlen kann, das eine große Anzahl von Dateien in einer ZIP-Datei in kürzerer Zeit komprimieren kann als das ZIP-Dateimodul , das würde sehr geschätzt werden (alles in der Nähe von ~ 5-10% schneller (oder mehr) wäre sehr hilfreich).

+2

Im schlimmsten Fall können Sie immer die Shell aufrufen und etwas wie 7zip von Python ausführen – Patashu

+1

Verwenden die komprimierten Bilddateien bereits Komprimierungsversionen ihrer jeweiligen Dateiformate? Wenn dies der Fall ist, verschwenden Sie wahrscheinlich erhebliche Verarbeitungszeit, wenn Sie versuchen, sie mit geringem Gewinn erneut zu komprimieren, indem Sie ZIP_DEFLATED anstelle von ZIP_STORED verwenden. Die Dokumentation für Python 2 & 3 besagt auch, dass das Modul ['zipfile'] (http://docs.python.org/2/library/zippfile.html#module-zipfile) nur die Entschlüsselung von verschlüsselten Dateien unterstützt ZIP-Archive, nicht erstellen - also wie genau machst du das? – martineau

+0

@Patashu danke für den Vorschlag, ich werde es versuchen und die Leistung testen. Die Dateien müssen .zip-Dateien sein, sonst würde ich mehr mit anderen Packungsformaten experimentieren. –

Antwort

4

Wie Patashu erwähnt, könnte Outsourcing zu 7-zip die beste Idee sein.

Hier ist ein Beispielcode zum Einstieg:

import os 
import subprocess 

path_7zip = r"C:\Program Files\7-Zip\7z.exe" 
path_working = r"C:\temp" 
outfile_name = "compressed.zip" 
os.chdir(path_working) 

ret = subprocess.check_output([path_7zip, "a", "-tzip", outfile_name, "*.txt", "*.py", "-pSECRET"]) 

Wie martineau erwähnt Sie mit Komprimierungsmethoden experimentieren können. This page gibt einige Beispiele zum Ändern der Befehlszeilenparameter.

+1

Danke für die Hilfe alle. Das Outsourcing an 7-zip (auf einer 1-GB-Teilmenge der .exr-Dateien) hat die Komprimierungszeit um fast 52% im Vergleich zur ZIP-Datei-Komprimierung beschleunigt, die wirklich großartig ist. Ich mache immer noch ein paar Tests mit der unkomprimierten Version, die @martineau vorgeschlagen hat, verglichen mit den angepassten Einstellungen von 7zip, aber es sieht so aus, als wäre die 7zip-Lösung definitiv eine Verbesserung. –

+1

@ michaelhubbard.ca: Mit 7-Zip ist eine gute Wahl, es ist ein ausgezeichnetes Dienstprogramm für diese Art von Sache. Beachten Sie, dass es eine reine Befehlszeilenversion namens '7za.exe' gibt, die nur 574 KB groß ist und alles, was Sie wahrscheinlich brauchen. Bitte fügen Sie auch irgendwo einen Kommentar hinzu und lassen Sie uns wissen, welchen Unterschied das Speichern und das Komprimieren ausmachen. – martineau

+0

@ michaelhubbard.ca: Ich habe vergessen zu erwähnen, dass 7-Zip auch sehr gute Verschlüsselungsoptionen hat, da Sie sagten, dass Sie an dieser Option interessiert waren. – martineau

Verwandte Themen