PyZip is a package for managing a zip content as a dictionary.
Is this zipping process simple enough?
>>> from pyzip import PyZip
>>>
>>> pyzip = PyZip()
>>> pyzip['key1'] = b"content_bytes"
>>> pyzip['key2'] = file_bytes
>>>
>>> pyzip.save("/path/to/file.zip")
>>> zip_bytes = pyzip.to_bytes() # Alternatively, to bytes
It is run on top of the module zipfile, however, in addition to its functionality, PyZip accepts to edit and remove elements of a zip. Furthermore, it provides integrity checks to ensure that elements are successfully stored (SHA256 hash).
Currently it is only supported Python 3.4.1 onwards:
sudo pip3 install pyzip
PyZip can easily store content into a zip on the fly. The usage is the same as a normal dictionary:
- Add content to in-memory zip:
>>> from pyzip import PyZip
>>>
>>> pyzip = PyZip()
>>> pyzip['key1'] = b"content_bytes"
- Get specific content:
>>> print(pyzip['key1'])
b"content_bytes"
- Edit content:
>>> pyzip['key1'] = b"replaced_content_bytes"
- Remove content:
>>> del pyzip['key1']
- Get zip bytes:
>>> zip_bytes = pyzip.to_bytes()
- Load from bytes:
>>> pyzip = PyZip().from_bytes(zip_bytes)
- Save to zip file:
>>> pyzip.save("path/to/file.zip")
- Load from zip file:
>>> pyzip = PyZip().from_file("path/to/file.zip")
- Convert existing dictionary into PyZip:
>>> pyzip = PyZip({'file1': b'example', 'file2': b'example2'})
- It is also possible to convert a multiple level dict into a PyZip:
>>> pyzip = PyZip({'file1': b'example', 'file2': b'example2', 'folder1': {'file1': b'file1 in folder1'}})
PyZip can be used in along with PyFolder in order to ease the compression and decompression of folders and zips:
Compressing recursively a folder into a zip:
>>> from pyzip import PyZip
>>> from pyfolder import PyFolder
>>>
>>> path_to_compress = "route/to/files"
>>>
>>> pyzip = PyZip(PyFolder(path_to_compress, interpret=False))
>>> pyzip.save("compressed_folder.zip")
>>>
Uncompressing recursively a previously compressed folder from a zip:
>>> from pyzip import PyZip
>>> from pyfolder import PyFolder
>>>
>>> destination = "route/for/uncompress"
>>>
>>> pyzip = PyZip(PyFolder(destination, interpret=False)).from_file("compressed_folder.zip", inflate=False)
>>>
It is released under the MIT license.