diff --git a/zipdir.py b/zipdir.py index e5d596e7..e51b34ff 100644 --- a/zipdir.py +++ b/zipdir.py @@ -1,6 +1,8 @@ import os import zipfile +import StringIO + def toZip(filename, directory): zippedHelp = zipfile.ZipFile(filename, "w", compression=zipfile.ZIP_DEFLATED) lst = os.listdir(directory) @@ -34,6 +36,27 @@ def addFolderToZip(zippedHelp,folder,fpath): elif os.path.isdir(f): addFolderToZip(zippedHelp,f) +def inMemoryZip(files): + # files have a structure of {'path/to/file' => content} dictionary + io = StringIO.StringIO() + memzip = zipfile.ZipFile(io, 'a', compression=zipfile.ZIP_DEFLATED) + memzip.debug = 3 + + for path in files: + memzip.writestr(path, files[path]) + + for zf in memzip.filelist: + zf.create_system = 0 + + memzip.close() + + return io.getvalue() + if __name__ == '__main__': - toZip('sample.epub', "books/A_Time_To_Reflect") - z = zipfile.ZipFile('sample.epub', 'r') \ No newline at end of file +# toZip('sample.epub', "books/A_Time_To_Reflect") +# z = zipfile.ZipFile('sample.epub', 'r') + files = {'test.txt' : 'test', 'data/abc.txt' : 'abc'} + data = inMemoryZip(files) + f = open('res.zip', 'w') + f.write(data) + f.close() \ No newline at end of file