/pyzip

Python ZIP module for simple zip/unzip of custom elements on the fly. It is interfaced as a Dict for ease of use.

Primary LanguagePythonMIT LicenseMIT

pyzip 0.2.0

PyZip is a package for managing a zip content as a dictionary.

https://travis-ci.org/ipazc/pyzip.svg?branch=master https://coveralls.io/repos/github/ipazc/pyzip/badge.svg?branch=master Code Health

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).

Installation

Currently it is only supported Python 3.4.1 onwards:

sudo pip3 install pyzip

Basic Usage

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'}})

Use case

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)
>>>

LICENSE

It is released under the MIT license.