Created
March 1, 2015 08:47
-
-
Save dmiro/b9b48e89da29ee69d0cf to your computer and use it in GitHub Desktop.
in memory zip
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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") | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment