2010-12-15 17 views
0

Ich versuche, mehrere Ordner einzeln zu zippen. Die Ordner enthalten Dateien. Ich habe ein Skript geschrieben, das perfekt funktioniert, nur dass die resultierenden ZIP-Dateien nicht wirklich komprimiert sind. Sie haben die gleiche Größe wie das Originalverzeichnis!Zip-Verzeichnis mit Python

Hier ist mein Code:

import os, zipfile 

workspace = "C:\\ziptest" 

dirList = os.listdir(workspace) 

def zipDir(path, zip): 
    for root, dirs, files in os.walk(path): 
    for file in files: 
     zip.write(os.path.join(root, file)) 

for item in dirList: 
    zip = zipfile.ZipFile('%s.zip' % item, 'w') 
    zipDir('C:\\ziptest\%s' % item, zip) 
    zip.close() 

Antwort

3

Ich bin kein Python-Experte, aber eine schnelle Suche zeigt, dass es ein weiteres Argument für zip.write ist wie zipfile.ZIP_DEFLATED. Ich habe das vonergriffen. Ich zitiere:

Das dritte, optionale Argument der Schreibmethode steuert, welche Komprimierungsmethode zu verwenden ist. Es steuert vielmehr, ob Daten überhaupt komprimiert werden sollen. Der Standardwert ist zipfile.ZIP_STORED, der die Daten ohne Komprimierung im Archiv speichert. Wenn das zlib-Modul installiert ist, können Sie auch zipfile.ZIP_DEFLATED verwenden, was zu einer "deflate" -Kompression führt.

Die Referenz ist here. Suchen Sie nach der Konstante ZIP_DEFLATED; es ist Definition:

Die numerische Konstante für die übliche ZIP-Komprimierungsmethode. Dies erfordert das zlib-Modul. Derzeit werden keine anderen Komprimierungsmethoden unterstützt.

Ich nehme an, das bedeutet, dass nur Standard-Komprimierung unterstützt wird ... hoffe, dass hilft!

0

Gibt es einen Grund, warum Sie nicht einfach die Shell-Befehl aufrufen, wie

def zipDir(path, zip): 
    subprocess.Popen('7z a -tzip %s %s'%(path, zip)) 
+2

Python direkte zipfile Unterstützung hat, die plattformübergreifende und verlässt sich nicht auf externe Programme ... das ist der Grund. –