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-5.0.0.tar.gz (57.6 kB view details)

Uploaded Source

Built Distribution

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

streamxl-5.0.0-cp313-cp313-macosx_11_0_arm64.whl (810.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for streamxl-5.0.0.tar.gz
Algorithm Hash digest
SHA256 f4e02be742a0d063afa75a9bc27589809ececf09c2c307cb7986b6efaee96916
MD5 b12f4e5a7e8ad5508e8d523fe592e9c2
BLAKE2b-256 b102f234c086b5f8e0ebf1ac7432d06a0403ab92a663a65e7c731d3d5342ea02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for streamxl-5.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 93d471464304b5c974adad5ed05e6758f380eecc42f418bd8808e585fcb197b0
MD5 c159fe0286fa2f3a2f75be82afaaa5d3
BLAKE2b-256 4ea540eef23a7d92b954c00f311c3c6d6e13fa20ef94c698abf9d503bd12fe37

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