2010-08-31 3 views
13

Dans une application web python, je suis en train d'emballer des choses dans un fichier zip. Je veux le faire complètement à la volée, en mémoire, sans toucher le disque. Cela va bien en utilisant ZipFile.writestr tant que je crée une structure de répertoire à plat, mais comment créer des répertoires dans le zip?Comment créer un fichier zip en mémoire avec des répertoires sans toucher le disque?

J'utilise python2.4.

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

+4

Avez-vous essayé simplement de définir le nom de fichier d'un fichier à ajouter à 'directory/filename.ext'? – theomega

+0

@theomega est correct. – mahmoud

Répondre

25

Ce que 'theomega' a dit dans le commentaire de mon post original, en ajoutant un '/' dans le nom de fichier fait l'affaire. Merci!

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

Notez que si vous utilisez python 3 alors vous devrez utiliser ['BytesIO'] (https://docs.python.org/ 3/library/io.html). – Panda

+0

Et si vous voulez juste avoir des dossiers sans fichiers, laissez un '/' à la fin. –

1

Utilisez un StringIO. Il est apparently OK pour les utiliser pour les fichiers zip.

+0

Nous faisons cela aussi. Fonctionne très bien. –

+0

Cette réponse est périmée, devrait-elle être downvoted? – AnotherParker

+1

@AnotherParker Si vous avez une solution plus moderne, s'il vous plaît postez et je vais upvote – RPGillespie

Questions connexes