flat_file_renderers
Render tabular/nested datasets (list, dict, QuerySet-like iterables, or record objects) into xlsx, csv, tsv, json, html or parquet files, zipped - with zero required dependencies.
Installation
pip install flat-file-renderers # csv, tsv, json, html
pip install flat-file-renderers[xlsx] # + Excel
pip install flat-file-renderers[parquet] # + Apache Parquet
pip install flat-file-renderers[all] # everything
Modules
flat_file_renderers.base -
BaseRenderer,ZipFileEntryflat_file_renderers.flat_dict_list_helper - flattens nested dicts/lists into tabular rows and columns
flat_file_renderers.separated_value -
CsvRenderer,TsvRendererflat_file_renderers.json -
JsonRenderer(JSON Lines/NDJSON,.jsonl)flat_file_renderers.html -
HtmlRendererflat_file_renderers.xlsx -
XlsxRenderer(extra:xlsx)flat_file_renderers.parquet -
ParquetRenderer(extra:parquet)
Quick start
from flat_file_renderers import CsvRenderer
renderer = CsvRenderer({})
zip_path = renderer.render({"dataset": [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]})
# zip_path -> Path to a .zip containing one .csv
Nested data is flattened automatically (contacts.1.phone, contacts.2.phone, …), and a
dict[str, dataset] renders one file per key, zipped together:
from flat_file_renderers.xlsx import XlsxRenderer # extra: xlsx
renderer = XlsxRenderer({})
zip_path = renderer.render({"dataset": {"Students": [...], "Courses": [...]}})
# zip_path -> Path to a .zip containing one .xlsx with two sheets
Runnable examples for every renderer are available in the sandbox/ directory of the repository.