tabulator
Consistent interface for stream reading and writing tabular data (csv/xls/json/etc)
What it is and what it does
Tabulator provides a unified interface for reading and writing tabular data across many common formats—CSV, XLS, ODS, JSON, Google Sheets, and SQL databases—without loading entire files into memory. It handles both local files and remote sources (HTTP, FTP, S3), automatically detects encoding, and supports compressed archives (ZIP, GZIP). The core abstraction is the Stream class, which lets you iterate over rows one at a time, making it suitable for processing large datasets on memory-constrained systems.
The package is in maintenance-only mode; its creators released Frictionless Framework as a more complete successor, but tabulator 1.x continues to receive bug fixes. It depends on 12 runtime libraries covering format-specific parsers (xlrd, openpyxl, ijson), cloud storage (boto3), database access (sqlalchemy), and HTTP transport (requests). The API is straightforward: open a stream, iterate or read rows, and close. It also ships with a CLI tool for quick command-line inspection of tabular files.
Use it for:
- Load and iterate over large CSV or Excel files without loading the entire dataset into memory.
- Fetch tabular data from remote HTTP or S3 sources and process row-by-row in a data pipeline.
- Convert between multiple tabular formats (e.g., CSV to JSON, XLS to SQL) using a consistent interface.
- Automatically detect and handle character encoding when reading files from unknown sources.
- Process compressed tabular archives (ZIP, GZIP) transparently without manual decompression.
- Build a quick CLI tool to inspect or validate the structure of tabular data files.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Reads and writes tabular data in multiple formats (CSV, XLS, JSON, ODS, Google Sheets, SQL) from local files, HTTP, FTP, and S3 sources with low memory overhead.
Yes, if you need to read or write multiple tabular formats and can accept an abandoned but stable library. The low install friction and broad format support make it useful for data processing scripts and one-off tasks. However, for new projects requiring active maintenance, security updates, or modern Python support, consider Frictionless Framework instead. No known vulnerabilities as of the query date.
Install
tabulator on PyPI
pip
pip install tabulatoruv
uv add tabulatorpoetry
poetry add tabulatorInstalling tabulator
Before you install
Low friction to install. The package is abandoned as of 2021 with no recent maintenance; the maintainers have moved to Frictionless Framework as the successor. Bug fixes for 1.x continue in the repository, but new features and active development have ceased.
License in practice
MIT license permits commercial and private use with minimal restrictions; you must include a copy of the license and copyright notice.
Quickstart
pip install tabulator
from tabulator import Stream
with Stream('data.csv', headers=1) as stream:
for row in stream:
print(row)
Verify before relying
- Whether the package works reliably with modern Python versions beyond 3.7, given its 2021 end-of-life date.
- Current stability and compatibility of the 12 runtime dependencies (boto3, sqlalchemy, openpyxl, etc.) with recent releases.
- Whether remote loading (HTTP, FTP, S3) still functions without updates to underlying transport libraries.
Package facts
| License | MIT (permissive) |
| Python support | not specified |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 12 — six, click, requests, chardet, boto3, unicodecsv, ijson, jsonlines, sqlalchemy, linear-tsv, xlrd, openpyxl |
| Maintenance | abandoned — 1,972 days since the last release |
| Last repo commit | (repository archived) |
| First released | |
| Downloads | 125,767/month — #11,801 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: tabulator-1.53.5-py2.py3-none-any.whl
Keywords: frictionless, data
Tags
More Python Modules packages
Converts domain names between Unicode and…
permissive · top 100 on PyPI
setuptoolsSetuptools is a Python build backend and…
permissive · top 100 on PyPI
PyYAMLPyYAML parses and emits YAML 1.1 data format,…
permissive · top 100 on PyPI
pydanticPydantic validates Python data structures…
permissive · top 100 on PyPI
annotated-typesProvides reusable metadata objects for use with…
permissive · top 100 on PyPI
typing-inspectionProvides runtime tools to inspect and…
permissive · top 100 on PyPI
dataflows-tabulatorReads and writes tabular data in multiple…
permissive · top 15,000 on PyPI
frictionlessFrictionless provides a unified Python…
permissive · top 5,000 on PyPI
datapackageProvides classes and utilities to create, load,…
permissive · top 15,000 on PyPI
csvwReads, writes, and validates tabular data…
permissive · top 5,000 on PyPI
linear-tsvParses and writes tabular data in Linear TSV…
permissive · top 15,000 on PyPI
tablibTablib converts tabular data between multiple…
permissive · top 5,000 on PyPI
tableschemaValidates, infers, and works with tabular data…
permissive · top 15,000 on PyPI
DrissionRecordBuffers and writes data to files (xlsx, csv,…
permissive · top 15,000 on PyPI
table-loggerTableLogger formats and outputs tabular data to…
copyleft · top 15,000 on PyPI
PTablePTable formats tabular data into visually…
permissive · top 15,000 on PyPI