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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

streamxl-1.2.2-cp313-cp313-macosx_11_0_arm64.whl (811.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

File details

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

File metadata

File hashes

Hashes for streamxl-1.2.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3f88f63c60661274acb6ab320fc53350bd2a8cdf5f3a86d19bde2d277b37343f
MD5 c1ed5e94d7185707379d38a35c50273f
BLAKE2b-256 22fe9d92741162093499465ace5b7d058910b796535ff1d14cd7b1106f19657a

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