[![PyPI](https://img.shields.io/pypi/v/fast-package-file.svg)](https://pypi.org/project/fast-package-file/)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/fast-package-file.svg)](https://pypi.org/project/fast-package-file/)
[![Build Status](https://travis-ci.com/Kataiser/fast-package-file.svg?branch=master)](https://travis-ci.com/Kataiser/fast-package-file)
[![Documentation Status](https://readthedocs.org/projects/fast-package-file/badge/?version=latest)](https://fast-package-file.readthedocs.io/en/latest/?badge=latest)
[![codecov](https://codecov.io/gh/Kataiser/fast-package-file/branch/master/graph/badge.svg)](https://codecov.io/gh/Kataiser/fast-package-file)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/5018ac2a202145eca3d0ede57904815e)](https://app.codacy.com/app/Kataiser/fast-package-file?utm_source=github.com&utm_medium=referral&utm_content=Kataiser/fast-package-file&utm_campaign=Badge_Grade_Dashboard)
# fast_package_file
Package a directory to a file, with fast file access and compression support
```python
import fast_package_file
# Package a directory into a file
fast_package_file.build('a_directory', 'a_package.file')
# Prepare a package file
data_package = fast_package_file.PackagedDataFile('a_package.file')
# Load a file from the packed directory and save it
with open('any.file', 'wb') as any_file:
data_package.load_file('path\\to\\any.file')
# Or just get the raw binary data
from PIL import Image
i = Image.open(io.BytesIO(data_package.load_file('image.png')))
# Some other useful functions
data_package.load_bulk(prefix='audio\\sfx\\', postfix='.wav')
fast_package_file.oneshot('a_package.file', 'path\\to\\any.file')
fast_package_file.oneshot_bulk('a_package.file', prefix='audio\\sfx\\', postfix='.wav')
```
## Installation
From PyPI:
```shell
pip install fast-package-file
```
Or from Github:
```shell
pip install git+git://github.com/Kataiser/fast-package-file.git@master#egg=fast_package_file
```
## Documentation
More details will be available at https://fast-package-file.readthedocs.io/en/latest/
## Features
- Is fast because only the data needed is loaded from the package file, total package size is irrelevant
- Obfuscates files from (most) users
- Like a .zip file, but doesn't decompress the entire thing when reading just one file
- Includes the entire directory and subdirectories, not just surface-level files
- Files are compressed with Gzip, but only if compression improves file size (per file) and is enabled (per package file)
- Pretty good error handling when loading package files, just catch fast_package_file.PackageDataError
- Inspired by video game packaging, such as UE4's .pak or GTA V's .rpf formats
- Cross-platform, has CI for Linux, MacOS, and Windows
## Contribute
- Issue Tracker: https://github.com/Kataiser/fast-package-file/issues
- Source Code: https://github.com/Kataiser/fast-package-file
## License
The project is licensed under the MIT license.