Extracting a zipfile to memory?

前端 未结 3 1005
刺人心
刺人心 2020-11-30 02:58

How do I extract a zip to memory?

My attempt (returning None on .getvalue()):

from zipfile import ZipFile
from StringIO imp         


        
3条回答
  •  爱一瞬间的悲伤
    2020-11-30 03:27

    Frequently working with in-memory archives in Python 2 I would recommend making a tool. Something like this:

    import zipfile
    import StringIO
    
    class InMemoryZip(object):
       def __init__(self):
           # Create the in-memory file-like object for working w/imz
           self.in_memory_zip = StringIO.StringIO()
    
       # Just zip it, zip it
       def append(self, filename_in_zip, file_contents):
           # Appends a file with name filename_in_zip and contents of
           # file_contents to the in-memory zip.
           # Get a handle to the in-memory zip in append mode
           zf = zipfile.ZipFile(self.in_memory_zip, "a", zipfile.ZIP_DEFLATED, False)
    
           # Write the file to the in-memory zip
           zf.writestr(filename_in_zip, file_contents)
    
           # Mark the files as having been created on Windows so that
           # Unix permissions are not inferred as 0000
           for zfile in zf.filelist:
               zfile.create_system = 0       
    
           return self
    
       def read(self):
           # Returns a string with the contents of the in-memory zip.
           self.in_memory_zip.seek(0)
           return self.in_memory_zip.read()
    
       # Zip it, zip it, zip it
       def writetofile(self, filename):
           # Writes the in-memory zip to a file.
           f = file(filename, "wb")
           f.write(self.read())
           f.close()
    
    if __name__ == "__main__":
       # Run a test
       imz = InMemoryZip()
       imz.append("testfile.txt", "Make a test").append("testfile2.txt", "And another one")
       imz.writetofile("testfile.zip")
    

提交回复
热议问题