Joe Joe - 5 days ago 5
Python Question

Adding a file-like object to a Zip file in Python

The Python ZipFile API seems to allow the passing of a file path to

ZipFile.write
or a byte string to
ZipFile.writestr
but nothing in between. I would like to be able to pass a file like object, in this case a
django.core.files.storage.DefaultStorage
but any file-like object in principle. At the moment I think I'm going to have to either save the file to disk, or read it into memory. Neither of these is perfect.

Answer

You are correct, those are the only two choices. If your DefaultStorage object is large, you may want to go with saving it to disk first; otherwise, I would use:

zipped = ZipFile(...)
zipped.writestr('archive_name', default_storage_object.read())

If default_storage_object is a StringIO object, it can use default_storage_object.getvalue().

Comments