edfio
Read and write EDF/EDF+C/BDF/BDF+C files.
Decision gist · record as of 2026-08-14
Yes. edfio is actively maintained, has no known vulnerabilities, low install friction, and fills a clear niche for EDF/BDF file handling in Python. It is suitable for production use in biomedical signal processing workflows if your use case does not require discontiguous file support or non-integer-duration slicing.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Python>=3.9 and NumPy>=1.22; slicing to non-integer-multiple timespans of data record duration is not supported.
- Low install friction: pure Python wheel with only numpy and typing-extensions as runtime dependencies.
- Active maintenance with a release 14 days ago and commits through August 2026.
License · maintenance · safety
Apache-2.0 (permissive) — Apache-2.0 permissive license allows commercial and private use with minimal restrictions; suitable for most projects.
last release 2026-07-31 (14 days) · last repo commit 2026-08-10 · 39 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 92,544 downloads/mo, #13,445 on PyPI
Alternatives
Verify before relying
pip install edfio
from edfio import read_edf
edf = read_edf("example.edf")
# Or create and write:
import numpy as np
from edfio import Edf, EdfSignal
edf = Edf([EdfSignal(np.random.randn(30 * 256), sampling_frequency=256, label="EEG")])
edf.write("output.edf")- Performance characteristics for files larger than a few GB and whether 'seconds' speed claim is typical or best-case.
- Whether 'fail late on read' behavior is appropriate for your use case or if early validation is needed.
What it is and what it does
edfio is a Python library for reading and writing EDF (European Data Format) and related biomedical signal files—formats widely used in EEG, sleep studies, and other physiological recording domains. It wraps NumPy for fast I/O, allowing you to load and save gigabyte-scale recordings, manipulate signal and recording metadata, drop or anonymize signals, slice by time or annotation, and work with both standard EDF and the extended EDF+ and BDF variants. The library uses an object-oriented design with full type annotations, making it IDE-friendly, and includes 100% test coverage.
The package trades some flexibility for safety: on read, it tolerates non-compliant headers and only raises exceptions when you access the problematic field; on write, it validates upfront to prevent creating invalid files. It does not enforce the EDF spec's recommended 61440-byte data record size limit, and discontiguous (EDF+D) files are treated as contiguous. Slicing to non-integer multiples of the data record duration is not supported.
Use it for
- Load EEG or polysomnography recordings from clinical EDF files for signal processing or machine learning pipelines.
- Convert or migrate between EDF, EDF+C, BDF, and BDF+C formats while preserving or modifying annotations.
- Anonymize patient recordings by dropping or modifying signal headers and metadata before sharing.
- Slice multi-hour sleep studies into shorter segments aligned to annotation events (e.g., sleep stages).
- Build a data pipeline that reads raw biomedical signals, modifies headers, and writes compliant output files.
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes.
edfio is actively maintained, has no known vulnerabilities, low install friction, and fills a clear niche for EDF/BDF file handling in Python. It is suitable for production use in biomedical signal processing workflows if your use case does not require discontiguous file support or non-integer-duration slicing.
Install
edfio on PyPI
Before you install
Low install friction: pure Python wheel with only numpy and typing-extensions as runtime dependencies. Active maintenance with a release 14 days ago and commits through August 2026.
Requires Python>=3.9 and NumPy>=1.22; slicing to non-integer-multiple timespans of data record duration is not supported.
License in practice
Apache-2.0 permissive license allows commercial and private use with minimal restrictions; suitable for most projects.
Quickstart
pip install edfio
from edfio import read_edf
edf = read_edf("example.edf")
# Or create and write:
import numpy as np
from edfio import Edf, EdfSignal
edf = Edf([EdfSignal(np.random.randn(30 * 256), sampling_frequency=256, label="EEG")])
edf.write("output.edf")
Verify before relying
- Performance characteristics for files larger than a few GB and whether 'seconds' speed claim is typical or best-case.
- Whether 'fail late on read' behavior is appropriate for your use case or if early validation is needed.
Package facts
| License | Apache-2.0 permissive |
| Python support | Supports the current Python release >=3.9 |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | 2 packagesnumpytyping-extensions |
| Maintenance | Actively maintained 14 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 92,544 / month, #13,445 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | License :: OSI Approved :: Apache Software LicenseProgramming Language :: Python :: 3Programming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.14Programming Language :: Python :: 3.9 |
Evidence: edfio-0.4.16-py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “EDF file reader writer”
- edfioedfio reads and writes EDF, EDF+C, BDF, and BDF+C files—standard…
- pyEDFlibpyEDFlib reads and writes EDF+/BDF+ biomedical signal files, with…
- fabioFabIO reads and writes 2D X-ray detector images in 30 different…
Give your agent the search over MCP, or paste the wish link into any chat.
More Scientific/Engineering packages
NumPy provides an N-dimensional array object and a comprehensive suite of mathematical, linear algebra, Fourier transform, and random number functions for scientific computing in Python.
pandas provides fast, flexible data structures (Series and DataFrame) for loading, cleaning, transforming, and analyzing labeled or relational data in Python.
scipy provides numerical algorithms for mathematics, science, and engineering—including optimization, integration, linear algebra, Fourier transforms, signal and image processing, and ODE solvers—built on numpy arrays.
scikit-learn provides a comprehensive Python library for supervised and unsupervised machine learning, including classification, regression, clustering, dimensionality reduction, and model evaluation tools built on NumPy and SciPy.
Install it if you need to train, evaluate, or deploy supervised or unsupervised learning models.
dill extends Python's pickle module to serialize and deserialize a much wider range of Python objects, including functions, lambdas, classes, and interpreter sessions, to byte streams for storage or network transmission.
Multiprocess is an enhanced fork of Python's standard multiprocessing library that uses dill for better serialization, allowing you to spawn processes with a threading-like API and share complex objects between them.
Install it if you use multiprocessing and encounter pickle serialization limits with lambdas or complex objects.
See also pyEDFlib · wfdb · SigMF · neurokit2 · edn-format · bioc · fabio · neo · mne-bids · pyPPG