2010-08-31 11 views
13

En una aplicación web de Python, estoy empaquetando algunas cosas en un archivo comprimido. Quiero hacer esto completamente sobre la marcha, en la memoria, sin tocar el disco. Esto funciona bien usando ZipFile.writestr siempre que esté creando una estructura de directorio plana, pero ¿cómo creo directorios dentro del zip?¿Cómo crear un archivo zip en memoria con directorios sin tocar el disco?

Estoy usando python2.4.

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

+4

¿Ha intentado simplemente establecer el nombre de archivo de un archivo para agregarlo a 'directory/filename.ext'? – theomega

+0

@theomega es correcto. – mahmoud

Respuesta

25

Lo que 'theomega' dijo en el comentario de mi publicación original, agregando un '/' en el nombre del archivo es el truco. ¡Gracias!

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

Tenga en cuenta que si usa Python 3, entonces querrá usar ['BytesIO'] (https://docs.python.org/ 3/library/io.html). – Panda

+0

Y si solo quiere tener carpetas sin archivos, deje un '/' al final. –

1

Utilice un StringIO. Es apparently OK usarlos para archivos zip.

+0

Hacemos esto también. Funciona muy bien –

+0

Esta respuesta no está actualizada, ¿debe caducar? – AnotherParker

+1

@AnotherParker Si tiene una solución más moderna, publíquela y votaré por arriba – RPGillespie

Cuestiones relacionadas