python-calamine 0.3.2


pip install python-calamine

  Latest version

Released: Apr 02, 2025


Meta
Author: Dmitriy <dimastbk@proton.me>
Requires Python: >=3.8

Classifiers

Development Status
  • 4 - Beta

License
  • OSI Approved :: MIT License

Programming Language
  • Rust
  • Python :: 3.8
  • Python :: 3.9
  • Python :: 3.10
  • Python :: 3.11
  • Python :: 3.12
  • Python :: 3.13

python-calamine

PyPI - Version Conda Version Python Version from PEP 621 TOML

Python binding for beautiful Rust's library for reading excel and odf file - calamine.

Is used

Installation

Pypi:

pip install python-calamine

Conda:

conda install -c conda-forge python-calamine

Example

from python_calamine import CalamineWorkbook

workbook = CalamineWorkbook.from_path("file.xlsx")
workbook.sheet_names
# ["Sheet1", "Sheet2"]

workbook.get_sheet_by_name("Sheet1").to_python()
# [
# ["1",  "2",  "3",  "4",  "5",  "6",  "7"],
# ["1",  "2",  "3",  "4",  "5",  "6",  "7"],
# ["1",  "2",  "3",  "4",  "5",  "6",  "7"],
# ]

By default, calamine skips empty rows/cols before data. For suppress this behaviour, set skip_empty_area to False.

from python_calamine import CalamineWorkbook

workbook = CalamineWorkbook.from_path("file.xlsx").get_sheet_by_name("Sheet1").to_python(skip_empty_area=False)
# [
# [",  ",  ",  ",  ",  ",  "],
# ["1",  "2",  "3",  "4",  "5",  "6",  "7"],
# ["1",  "2",  "3",  "4",  "5",  "6",  "7"],
# ["1",  "2",  "3",  "4",  "5",  "6",  "7"],
# ]

Also, you can use monkeypatch for pandas for use this library as engine in read_excel() (only pandas 2.0 and 2.1 are supported). Pandas 2.2 and above have built-in support of python-calamine.

from pandas import read_excel
from python_calamine.pandas import pandas_monkeypatch


pandas_monkeypatch()

read_excel("file.xlsx", engine="calamine")
#            1   2   3   4   5   6   7
# 0          1   2   3   4   5   6   7
# 1          1   2   3   4   5   6   7

Also, you can find additional examples in tests.

Development

You'll need rust installed.

# clone this repo or your fork
git clone git@github.com:dimastbk/python-calamine.git
cd python-calamine
# create a new virtual env
python3 -m venv env
source env/bin/activate
# install dev dependencies and install python-calamine
pip install -e .[dev]
# lint code
pre-commit run --all-files
# test code
pytest

Wheel compatibility matrix

Platform CPython 3.8 CPython 3.9 CPython 3.10 CPython 3.11 CPython 3.12 CPython 3.13 PyPy 3.9 (pp73) PyPy 3.10 (pp73)
macosx_10_12_x86_64
macosx_11_0_arm64
manylinux1_i686
manylinux2014_aarch64
manylinux2014_armv7l
manylinux2014_ppc64le
manylinux2014_s390x
manylinux2014_x86_64
manylinux_2_17_aarch64
manylinux_2_17_armv7l
manylinux_2_17_ppc64le
manylinux_2_17_s390x
manylinux_2_17_x86_64
manylinux_2_5_i686
musllinux_1_1_aarch64
musllinux_1_1_x86_64
win32
win_amd64
win_arm64

Files in release

python_calamine-0.3.2-cp310-cp310-macosx_10_12_x86_64.whl (811.2KiB)
python_calamine-0.3.2-cp310-cp310-macosx_11_0_arm64.whl (790.4KiB)
python_calamine-0.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (852.1KiB)
python_calamine-0.3.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (855.4KiB)
python_calamine-0.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (920.5KiB)
python_calamine-0.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (956.3KiB)
python_calamine-0.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (865.5KiB)
python_calamine-0.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (903.5KiB)
python_calamine-0.3.2-cp310-cp310-musllinux_1_1_aarch64.whl (1.0MiB)
python_calamine-0.3.2-cp310-cp310-musllinux_1_1_x86_64.whl (1.0MiB)
python_calamine-0.3.2-cp310-cp310-win32.whl (647.8KiB)
python_calamine-0.3.2-cp310-cp310-win_amd64.whl (675.9KiB)
python_calamine-0.3.2-cp311-cp311-macosx_10_12_x86_64.whl (811.4KiB)
python_calamine-0.3.2-cp311-cp311-macosx_11_0_arm64.whl (790.4KiB)
python_calamine-0.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (852.4KiB)
python_calamine-0.3.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (855.9KiB)
python_calamine-0.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (920.2KiB)
python_calamine-0.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (955.8KiB)
python_calamine-0.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (865.2KiB)
python_calamine-0.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (903.4KiB)
python_calamine-0.3.2-cp311-cp311-musllinux_1_1_aarch64.whl (1.0MiB)
python_calamine-0.3.2-cp311-cp311-musllinux_1_1_x86_64.whl (1.0MiB)
python_calamine-0.3.2-cp311-cp311-win32.whl (647.7KiB)
python_calamine-0.3.2-cp311-cp311-win_amd64.whl (676.2KiB)
python_calamine-0.3.2-cp311-cp311-win_arm64.whl (651.7KiB)
python_calamine-0.3.2-cp312-cp312-macosx_10_12_x86_64.whl (805.8KiB)
python_calamine-0.3.2-cp312-cp312-macosx_11_0_arm64.whl (785.2KiB)
python_calamine-0.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (851.1KiB)
python_calamine-0.3.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (854.9KiB)
python_calamine-0.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (921.4KiB)
python_calamine-0.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (953.4KiB)
python_calamine-0.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (864.8KiB)
python_calamine-0.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (904.3KiB)
python_calamine-0.3.2-cp312-cp312-musllinux_1_1_aarch64.whl (1.0MiB)
python_calamine-0.3.2-cp312-cp312-musllinux_1_1_x86_64.whl (1.0MiB)
python_calamine-0.3.2-cp312-cp312-win32.whl (648.0KiB)
python_calamine-0.3.2-cp312-cp312-win_amd64.whl (676.4KiB)
python_calamine-0.3.2-cp312-cp312-win_arm64.whl (650.6KiB)
python_calamine-0.3.2-cp313-cp313-macosx_10_12_x86_64.whl (805.1KiB)
python_calamine-0.3.2-cp313-cp313-macosx_11_0_arm64.whl (784.4KiB)
python_calamine-0.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (851.0KiB)
python_calamine-0.3.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (853.6KiB)
python_calamine-0.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (920.6KiB)
python_calamine-0.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl (952.0KiB)
python_calamine-0.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (864.4KiB)
python_calamine-0.3.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl (903.2KiB)
python_calamine-0.3.2-cp313-cp313-musllinux_1_1_aarch64.whl (1.0MiB)
python_calamine-0.3.2-cp313-cp313-musllinux_1_1_x86_64.whl (1.0MiB)
python_calamine-0.3.2-cp313-cp313-win32.whl (647.9KiB)
python_calamine-0.3.2-cp313-cp313-win_amd64.whl (675.7KiB)
python_calamine-0.3.2-cp313-cp313-win_arm64.whl (650.3KiB)
python_calamine-0.3.2-cp38-cp38-macosx_10_12_x86_64.whl (812.3KiB)
python_calamine-0.3.2-cp38-cp38-macosx_11_0_arm64.whl (792.0KiB)
python_calamine-0.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (853.3KiB)
python_calamine-0.3.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (856.4KiB)
python_calamine-0.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (921.7KiB)
python_calamine-0.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (956.3KiB)
python_calamine-0.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (866.5KiB)
python_calamine-0.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl (904.3KiB)
python_calamine-0.3.2-cp38-cp38-musllinux_1_1_aarch64.whl (1.0MiB)
python_calamine-0.3.2-cp38-cp38-musllinux_1_1_x86_64.whl (1.0MiB)
python_calamine-0.3.2-cp38-cp38-win32.whl (648.5KiB)
python_calamine-0.3.2-cp38-cp38-win_amd64.whl (676.4KiB)
python_calamine-0.3.2-cp39-cp39-macosx_10_12_x86_64.whl (812.4KiB)
python_calamine-0.3.2-cp39-cp39-macosx_11_0_arm64.whl (792.0KiB)
python_calamine-0.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (853.1KiB)
python_calamine-0.3.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (856.4KiB)
python_calamine-0.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (921.4KiB)
python_calamine-0.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (956.9KiB)
python_calamine-0.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (866.2KiB)
python_calamine-0.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl (903.9KiB)
python_calamine-0.3.2-cp39-cp39-musllinux_1_1_aarch64.whl (1.0MiB)
python_calamine-0.3.2-cp39-cp39-musllinux_1_1_x86_64.whl (1.0MiB)
python_calamine-0.3.2-cp39-cp39-win32.whl (648.3KiB)
python_calamine-0.3.2-cp39-cp39-win_amd64.whl (676.5KiB)
python_calamine-0.3.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl (812.7KiB)
python_calamine-0.3.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl (792.0KiB)
python_calamine-0.3.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (853.1KiB)
python_calamine-0.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (866.7KiB)
python_calamine-0.3.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl (906.3KiB)
python_calamine-0.3.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl (1.0MiB)
python_calamine-0.3.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl (1.0MiB)
python_calamine-0.3.2-pp310-pypy310_pp73-win_amd64.whl (676.2KiB)
python_calamine-0.3.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl (813.8KiB)
python_calamine-0.3.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl (793.1KiB)
python_calamine-0.3.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (854.4KiB)
python_calamine-0.3.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (867.7KiB)
python_calamine-0.3.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl (906.2KiB)
python_calamine-0.3.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl (1.0MiB)
python_calamine-0.3.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl (1.0MiB)
python_calamine-0.3.2-pp39-pypy39_pp73-win_amd64.whl (676.2KiB)
python_calamine-0.3.2.tar.gz (114.6KiB)
Extras:
Dependencies:
packaging (>=23.1)