2010-08-31 5 views
13

In einer Python-Web-Anwendung verpacke ich einige Sachen in einer Zip-Datei. Ich möchte das komplett im laufenden Betrieb machen, ohne die Festplatte zu berühren. Das geht gut mit ZipFile.writestr, solange ich eine flache Verzeichnisstruktur erstellen, aber wie erstelle ich Verzeichnisse in der Zip?Wie erstelle ich eine In-Memory-Zip-Datei mit Verzeichnissen, ohne die Festplatte zu berühren?

Ich benutze Python2.4.

http://docs.python.org/library/zipfile.html

+4

Haben Sie versucht, einfach den Dateinamen einer Datei festzulegen, die zu 'directory/filename.ext' hinzugefügt werden soll? – theomega

+0

@theomega ist korrekt. – mahmoud

Antwort

25

Was 'theomega' im Kommentar zu meinem ursprünglichen Beitrag gesagt hat, fügt ein '/' im Dateinamen den Trick hinzu. Vielen Dank!

from zipfile import ZipFile 
from StringIO import StringIO 

inMemoryOutputFile = StringIO() 

zipFile = ZipFile(inMemoryOutputFile, 'w') 
zipFile.writestr('OEBPS/content.xhtml', 'hello world') 
zipFile.close() 

inMemoryOutputFile.seek(0) 
+2

Beachten Sie, dass wenn Sie Python 3 verwenden möchten Sie dann ['BytesIO'] (https://docs.python.org/ 3/Bibliothek/io.html). – Panda

+0

Und wenn Sie nur Ordner ohne Dateien haben wollen, lassen Sie ein '/' am Ende. –

1

ein StringIO verwenden. Es ist apparently OK, sie für zipfiles zu verwenden.

+0

Wir machen das auch. Funktioniert sehr gut. –

+0

Diese Antwort ist veraltet, sollte sie downvolotiert werden? – AnotherParker

+1

@AnotherParker Wenn Sie eine modernere Lösung haben, bitte posten Sie und ich werde upvote – RPGillespie

Verwandte Themen