Skip to main content

Common interface for archive manipulation

Project description

arlib: Common interface for archive manipulation (Tar, Zip, etc)

Build Status Documentation Status Coverage Status

Table of Contents

Rationale

Sometimes, we need to deal with different archive files. There are several packages/modules for archive file manipulation, e.g., zipfile for "*.zip" files, tarfile for "*.tar.gz" or "*.tar.bz2" files, etc. If we want to support different archive type in our project, probably we need to do the following:

if zipfile.is_zipfile(file):
    ar = zipfile.ZipFile(file)
    f = ar.open('member-name')
    # some processing
elif zipfile.is_tarfile(file):
    ar = tarfile.open(file)
    f = ar.extractfile('member-name')
    # some processing
else:
    # other stuffs

The problems of the above approach are:

  • We need repeat the above code everywhere we want to support different archive types.
  • Different archive manipulation modules (e.g. zipfile and tarfile) may have different API convention.

arlib is designed to solve the above problems. It abstracts the logic of archive manipulations and provides a single high level interface for users.

Installation

Install from PyPI

pip install arlib

Install from Anaconda

conda install -c liyugong arlib

Simple example

The abstract class arlib.Archive defines the common interface to handle different archive types, such as tar file, zip file or an directory. Three concrete classes arlib.TarArchive, arlib.ZipArchive and arlib.DirArchive implement the interface correspondingly.

Open archive

The simplest way to open an archive is using arlib.open function

ar = arlib.open('abc.tar.gz', 'r')

This will determine the type of the archive automatically and return a corresponding object of one of the three engine classes. If we don't want the automatic engine determination mechanism, we can also specify the class via argument engine, e.g.

ar = arlib.open('abc.tar.gz', 'r', engine=ZipArchive)

or we can simply construct an object of the engine class

ar = arlib.ZipArchive('abc.tar.gz', 'r')

List member names

The property member_names will return a list of the names of members contained in the archive, e.g.,

print(ar.member_names)

Check member

Use the method member_is_dir and member_is_file to check whether a member is a directory or a regular file

ar = arlib.open('abc.tar', 'r')
ar.member_is_dir('member_name')
ar.member_is_file('member_name')

Open a member

Use the method open_member to open a member in the archive as a file object

with ar.open_member('a.txt', 'r') as f:
    # do sth by using f as an opened file object

Extract members to a location

Use the method extract to extract members to a specified location

ar = arlib.open('abc.tar', 'r')
ar.extract() # extract all the members to the current working directory
ar.extract(path='d:/hello', members=['abc.txt', 'dir1/'])

License

The arlib package is released under the MIT License

Documentation

https://arlib.readthedocs.io

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

arlib-0.0.4.tar.gz (8.2 kB view details)

Uploaded Source

Built Distribution

arlib-0.0.4-py2.py3-none-any.whl (7.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file arlib-0.0.4.tar.gz.

File metadata

  • Download URL: arlib-0.0.4.tar.gz
  • Upload date:
  • Size: 8.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.8

File hashes

Hashes for arlib-0.0.4.tar.gz
Algorithm Hash digest
SHA256 1ebd9f77da1c6323f0340c5444643b753c2f0dda9c396afedb49d2538180cb9c
MD5 9b01c52bb16695aaff3d98a9ef8eca8e
BLAKE2b-256 7869541eb2f17dc1992bb391095a50775b7d2b4c9510905f6f9d2c0dd4996699

See more details on using hashes here.

File details

Details for the file arlib-0.0.4-py2.py3-none-any.whl.

File metadata

  • Download URL: arlib-0.0.4-py2.py3-none-any.whl
  • Upload date:
  • Size: 7.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.8

File hashes

Hashes for arlib-0.0.4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 7e537bee5a157f5a1f1b06ec10d0ff662ca40ddf673362ce2ef352b20dbd4fad
MD5 3faa336b60983cb7ae8f61dd76417d44
BLAKE2b-256 62fed500a4b80583f87ce742defb2bea161a7485642da52331eb0c7d4e7c1b58

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page