Python in-memory zip file
I needed this for something where I wanted to send the visitor of a website a bunch of files he selected at once. An easy way to do this would be to add the files to a zip file and then send that zip file to the user. Unfortunately Python doesn't have an in-memory zip file library, you can only interact with zip files on disk.
After a bit of googling around I came to this StackOverflow answer. That worked like a charm, and here is my more reusable version:
from zipfile import ZipFile
from StringIO import StringIO
class InMemoryZipFile(object):
def __init__(self):
self.inMemoryOutputFile = StringIO()
def write(self, inzipfilename, data):
zip = ZipFile(self.inMemoryOutputFile, 'a')
zip.writestr(inzipfilename, data)
zip.close()
def read(self):
self.inMemoryOutputFile.seek(0)
return self.inMemoryOutputFile.getvalue()
def writetofile(self, filename):
open('out.zip', 'wb').write(self.read())
Save as inmemoryzip.py
and import it as inmemoryzip
.
This is quite limited compared to the standard ZipFile class, but this gets the job done for what I needed it.