If I have the contents of a zipfile in a Python string, can I decompress it without writing it to a file?

python

Solution

zipfile.ZipFile accepts any file-like object:

class zipfile.ZipFile(file, …)

Open a ZIP file, where file can be a path to a file (a string), a file-like object or a path-like object.

So you can use BytesIO (3.x) or StringIO (2.x):

# Modern Python 3.x
from io import BytesIO
import zipfile

fp = BytesIO(b'PK\x03\x04\x14')
zfp = zipfile.ZipFile(fp, "r")
# Legacy Python 2.x
try:
    from cStringIO import StringIO
except:
    from StringIO import StringIO
import zipfile

fp = StringIO('PK\x03\x04\x14')
zfp = zipfile.ZipFile(fp, "r")

Problem

I've written some Python code that fetches a zip file from the web and into a string: ``` In [1]: zip_contents[0:5] Out[1]: 'PK\x03\x04\x14' ``` I see there's a zipfile library, but I'm having trouble finding a function in it that I can just pass a bunch of raw zip data. It seems to want to read it from a file. Do I really need to dump this to a temp file, or is there a way around it?

Original source

Related problems