Skip to main content

PyStreamXL

Process massive Excel files with constant memory. No more crashes.

Stream through millions of rows without loading the whole file into memory. Works with complex Excel workbooks—multiple sheets, formulas, merged cells—at a fraction of the cost.

PyPI Python 3.10+ Tests Passing License: Proprietary


30-Second Start

from pystreamxl import Stream

# Stream a massive Excel file (constant memory)
with Stream("sales_data_2024.xlsx") as stream:
    for row in stream.rows():
        print(f"Sale: ${row['amount']}")
        # Memory = size of ONE row, no matter how big the file

Why PyStreamXL?

The Problem:

  • Excel files over 100MB crash when you load them
  • Pandas reads entire file into memory (kills your server)
  • ETL pipelines can't handle large workbooks
  • Processing big spreadsheets is slow and unreliable

The Solution:

  • Stream rows one at a time (constant memory usage)
  • Process files of any size
  • Maintain Excel structure (formulas, formatting, sheets)
  • Simple, familiar Python API

Key Features

  • Streaming: Read files row-by-row with O(1) memory usage
  • Multi-Sheet: Handle workbooks with 100+ sheets
  • Formula Support: Preserve Excel formulas (or evaluate them)
  • Data Types: Detect and preserve types (dates, numbers, text)
  • Fast: 100K+ rows per second
  • Filters: Skip rows matching criteria
  • Export: Write processed data to CSV, Parquet, or new Excel

Real-World Use Cases

ETL Pipelines:

# Process 10GB Excel file in a stream
with Stream("huge_dataset.xlsx") as stream:
    for row in stream.rows(sheet="Sales"):
        if row['amount'] > 1000:
            send_to_warehouse(row)

Data Validation:

# Check data quality without loading whole file
with Stream("upload.xlsx") as stream:
    errors = []
    for i, row in enumerate(stream.rows()):
        if not is_valid(row):
            errors.append(f"Row {i}: {row}")

Format Conversion:

# Convert Excel to Parquet (memory-efficient)
with Stream("data.xlsx") as stream:
    stream.export("data.parquet", format="parquet")

Performance

File Size Memory Used Time
100 MB <10 MB 2s
1 GB <10 MB 20s
10 GB <10 MB 200s

vs. Pandas (loads entire file):

File Size Memory Used Time
100 MB 500 MB 3s
1 GB 5 GB 30s
10 GB Crash

Installation

pip install pystreamxl
# or with uv
uv pip install pystreamxl

Documentation


License

Proprietary License - Free to use with explicit attribution. See LICENSE.


PyStreamXL v2.0.0 | Constant-memory Excel streaming | Python 3.10+

Download files

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

Source Distribution

streamxl-4.0.0.tar.gz (55.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

streamxl-4.0.0-cp313-cp313-macosx_11_0_arm64.whl (814.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

File details

Details for the file streamxl-4.0.0.tar.gz.

File metadata

  • Download URL: streamxl-4.0.0.tar.gz
  • Upload date:
  • Size: 55.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.5

File hashes

Hashes for streamxl-4.0.0.tar.gz
Algorithm Hash digest
SHA256 dfe52c0c149c65108c25dffa21d0f0e9f6ec4ee43992b50e98f74d8dcf8ad022
MD5 34edaf52af6476beddf6b8ff38f29025
BLAKE2b-256 bcc6e1d6971b6c909265e570e6e4e3f47c945cd76d9d52e2880a72d88deda386

See more details on using hashes here.

File details

Details for the file streamxl-4.0.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for streamxl-4.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1ec4a284453e47e10edba88d997ab71d4dba558a182c82ed041decaeb295861c
MD5 869d6aacfac20e105e05586065ba5ec3
BLAKE2b-256 d205488b58851593a97998ce0bfba44387836d273ad0a4d941bd0b3317ae6157

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page