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.
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
- Quick Start — Stream your first file
- Advanced — Formulas, formatting, multi-sheet
- Performance Tips — Optimize for your use case
- Examples — Real-world workflows
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4e02be742a0d063afa75a9bc27589809ececf09c2c307cb7986b6efaee96916
|
|
| MD5 |
b12f4e5a7e8ad5508e8d523fe592e9c2
|
|
| BLAKE2b-256 |
b102f234c086b5f8e0ebf1ac7432d06a0403ab92a663a65e7c731d3d5342ea02
|
File details
Details for the file streamxl-5.0.0-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: streamxl-5.0.0-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 810.7 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93d471464304b5c974adad5ed05e6758f380eecc42f418bd8808e585fcb197b0
|
|
| MD5 |
c159fe0286fa2f3a2f75be82afaaa5d3
|
|
| BLAKE2b-256 |
4ea540eef23a7d92b954c00f311c3c6d6e13fa20ef94c698abf9d503bd12fe37
|