Skip to main content

pbz2 v0.2.3

Stream and parallel-process .bz2 files via pbzip2 (parallel bzip2).

Reads compressed files through a pbzip2 -dc subprocess for multi-core decompression — no temp files, no full decompression to disk — and falls back to the stdlib bz2 module when the pbzip2 binary is unavailable. Iterate raw lines, newline-aligned text chunks, or parsed JSONL records, or fan chunks out across a process pool for parallel parsing. Includes a CLI for quick inspection and a Python API for custom pipelines. Corrupt or truncated input raises instead of silently yielding partial data. See the changelog for release history.

Project Structure

pbz2/
├── pbz2/                 # Python library
│   ├── reader.py         # Streaming readers (open_decompress, iter_*)
│   ├── parallel.py       # Process-pool chunk processing
│   └── cli.py            # Typer CLI commands
├── tests/                # Test suite
└── pyproject.toml        # Project configuration

Installation

uv add pbz2

From source:

git clone https://github.com/gitronald/pbz2.git
cd pbz2
uv sync

From a specific branch:

uv add git+https://github.com/gitronald/pbz2.git@dev

Install the pbzip2 binary for parallel decompression (optional — without it, reads fall back to single-threaded stdlib bz2):

sudo apt install pbzip2     # Debian/Ubuntu
brew install pbzip2         # macOS

Note: the parallel speedup only applies to files that were compressed with pbzip2. pbzip2 writes its output as multiple independent bzip2 streams that can be decompressed concurrently; a file compressed with standard bzip2 (or Python's bz2) is a single stream, which pbzip2 can only decompress on one core. Compress with pbzip2 data.json to get parallel decompression later.

CLI Commands

Quick inspection of .bz2 files from the shell:

# Count lines
pbz2 count data.json.bz2

# Print the first N lines
pbz2 head data.json.bz2 -n 5

Python API

Iterate

import pbz2

# Parsed JSON objects from a .json.bz2 file
for obj in pbz2.iter_jsonl("data.json.bz2"):
    ...

# Raw UTF-8 lines
for line in pbz2.iter_lines("data.txt.bz2"):
    ...

# Newline-aligned text chunks (useful for batched processing)
for chunk in pbz2.iter_chunks("data.txt.bz2"):
    ...

Parallel processing

process_parallel streams chunks of newline-terminated records through a worker pool. The worker function receives raw text chunks (so parsing happens in the worker, not the main process), and on_result runs in the main process to handle each result as it completes.

import json
import pbz2

def parse_chunk(chunk: str) -> list[dict]:
    # split on "\n" only -- str.splitlines() also breaks on U+2028/U+2029 etc.,
    # which can appear raw inside records and would shatter them
    return [json.loads(line) for line in chunk.split("\n") if line]

def save(records: list[dict]) -> None:
    ...  # write to db, file, etc.

pbz2.process_parallel(
    "data.json.bz2",
    worker_fn=parse_chunk,
    on_result=save,
    num_processes=8,
)

Reference

Function Description
iter_chunks(path, **opts) Yield UTF-8 text chunks ending on a newline boundary.
iter_lines(path, **opts) Yield non-empty UTF-8 lines (no trailing newline).
iter_jsonl(path, *, loads=None, **opts) Yield parsed JSON objects (uses orjson; pass loads= to override).
process_parallel(path, worker_fn, *, on_result=None, worker_args=(), num_processes=None, max_pending=None, ...) Run worker_fn(chunk, *worker_args) in a process pool, dispatching results to on_result.
open_decompress(path, **opts) Low-level: open a binary stream of decompressed bytes.

Common options

  • num_processors — pbzip2 worker count (default: cpu_count - 1)
  • bufsize_mb — OS pipe buffer between pbzip2 and Python (default: 32 MB)
  • stream_buffer_mb — Python-side read chunk size (default: 4 MB)

Metadata

Release files for pbz2 0.2.3

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

Source distribution (sdist)

Source distribution for pbz2 0.2.3
File Size Uploaded
pbz2-0.2.3.tar.gz 9.0 kB Details

Built distribution (wheel)

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

Total release size: 17.4 kB

Release files / pbz2-0.2.3.tar.gz

Download URL pbz2-0.2.3.tar.gz
Size 9.0 kB
Tags Source
SHA-256 checksum
How to use checksums
8a69215e7c7567de7e39587a5b0ca5900a7edeced84039f22c525db6f291c2ca
BLAKE2b-256 checksum
How to use checksums
f0bd089a227b1d6a0f356e1c2fc5330a626ce7619b956e2bcc573286b4267f45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / pbz2-0.2.3-py3-none-any.whl

Download URL pbz2-0.2.3-py3-none-any.whl
Size 8.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
44b373a371f221d5d5c3db8784a7accb2fa2d79f3b1f3904e92e60fffb293156
BLAKE2b-256 checksum
How to use checksums
84208dcf94ea2373aa0bc3dbcec5fd6284cfb7f92baa504f20be8fe2ebd276c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.3 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.2

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