Skip to main content

Huffify

PyPI - Version Static Badge PyPI - Format GitHub Actions Workflow Status

Description

Huffify allows you to compress text using Huffman algorithm. Huffify focuses on flexibility - you can choose various encoders, Huffman tree nodes, and file managers to achieve the best compression quality.

Historical note: The Huffman algorithm was developed by David A. Huffman in 1952. Read more about David and his algorithm

Installation

Using pip:

pip install huffify

Using poetry:

poetry add huffify

Usage

Command Line Interface

Huffify provides a convenient command-line interface for common operations:

# Compress a file (auto-generates filename: input_a1b2c3d4.huf)
huffify compress input.txt

# Compress with custom filename (outputs: custom_name.huf)
huffify compress input.txt --filename=custom_name

# Compress to specific directory
huffify compress input.txt /path/to/output/dir

# Decompress a file (must have .huf extension)
huffify decompress compressed.huf output.txt

# View encoding table for a text
huffify table "Hello, World!"

# Run benchmarks
huffify benchmark

The CLI commands in detail:

  • compress: Compresses a text file using Huffman coding

    • Automatically generates .huf files with unique identifiers
    • Shows compression statistics including original size, compressed size, and compression ratio
    • Usage:
      • Basic: huffify compress <input_file> [output_dir]
      • With custom filename: huffify compress <input_file> [output_dir] --filename=<name>
    • Examples:
      • huffify compress input.txt . → Creates input_a1b2c3d4.huf
      • huffify compress input.txt . -filename=custom → Creates custom.huf
      • huffify compress input.txt /output/dir → Creates /output/dir/input_a1b2c3d4.huf
  • decompress: Decompresses a previously compressed file

    • Only accepts files with .huf extension
    • Restores the original text content
    • Usage: huffify decompress <compressed_file.huf> <output_file>
  • table: Displays the Huffman encoding table for a given text

    • Shows character-to-code mappings used in compression
    • Usage: huffify table "<text>"

Python API

Basic usage:

from huffify import HuffmanCodec
from huffify.core.heap_nodes import Node, LexicographicNode
from huffify.core.encoders import MVPEncoder

# You can use LexicographicNode for idempotent results
codec = HuffmanCodec(node=Node, encoder=MVPEncoder)
message = "The sun shines bright today."

# Here is the "FinalDataSet", which can be saved as file
encoded_message = codec.encode(message)

# Also you can decode this "FinalDataSet" to get original message
decoded_message = codec.decode(encoded_message)

File operations:

from huffify import Huffify
from huffify.core.file_manager import Picklefier

# Create compressor with preferred file manager
file_compressor = Huffify(file_manager=Picklefier)

# Compress and save to file
file_compressor.save(path="output.huf", message="The sun shines bright today.")

# Load and decompress from file
decoded_message = file_compressor.load(path="output.huf")

Project Structure

Huffify/
├── src/
│   └── huffify/
│       ├── core/           # Core compression functionality
│       │   ├── codec.py    # Huffman encoding/decoding
│       │   ├── nodes.py    # Tree node implementations
│       │   ├── encoders.py # Data encoding strategies
│       │   └── file_manager.py  # File I/O operations
│       ├── presentation/   # User interfaces
│       │   ├── cli.py      # Command-line interface
│       │   └── benchmark.py # Performance testing
│       └── utils/          # Shared utilities
├── tests/                  # Test suite
├── docs/                   # Documentation
└── examples/               # Usage examples

Features

  • Flexible compression with customizable components:
    • Multiple node types for tree construction
    • Pluggable encoders for different encoding strategies
    • Extensible file manager system
  • Command-line interface for common operations
  • Comprehensive benchmarking suite
  • Type hints and documentation
  • Extensive test coverage

Contributing

We welcome contributions! Please check out our Contributing Guide for guidelines on how to proceed.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Metadata

Release files for huffify 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for huffify 0.2.1
File Size Uploaded
huffify-0.2.1.tar.gz 16.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for huffify 0.2.1
File Interpreter ABI Platform
huffify-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 34.2 kB

Release files / huffify-0.2.1.tar.gz

Download URL huffify-0.2.1.tar.gz
Size 16.4 kB
Tags Source
SHA-256 checksum
How to use checksums
ead76a1423b76b9ab6d144b3a2169edd481dde98ad3592d04ac7c066056bed29
BLAKE2b-256 checksum
How to use checksums
5f374b5041f3aba72b6934b651f1f71211e94055ce83a821267f8ec1b549a747
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.2 CPython/3.12.9 Linux/6.8.0-1021-azure

Release files / huffify-0.2.1-py3-none-any.whl

Download URL huffify-0.2.1-py3-none-any.whl
Size 17.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
52534f5602196003306875f701b13cce1cdfe07f9057b4e7a475d9a8a23dfc90
BLAKE2b-256 checksum
How to use checksums
e2471ae9ab0d099bcecd8989d53e23a0271166e192ba89f210c899745b0d64a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.2 CPython/3.12.9 Linux/6.8.0-1021-azure

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page