edfio#
edfio is a Python package for reading and writing EDF and EDF+C files.
It requires Python>=3.9 and NumPy>=1.22 and is available on PyPI:
pip install edfio
Support for EDF and EDF+C, including annotations
Fast I/O thanks to NumPy - read and write GB-sized files in seconds
Fail late on read: Non-compliant header fields only raise an exception when the corresponding property is accessed.
Fail early on write: Trying to create a new non-compliant EDF file raises an exception.
Object-oriented design and type annotations for IDE autocompletion
Pure Python implementation and 100% test coverage to simplify contributions
Features#
Read/write from/to files or file-like objects
Modify signal and recording headers
Drop EDF+ annotations
Slice recordings (by seconds or annotation texts)
Drop individual signals
Anonymize recordings
Known limitations#
Discontiguous files (EDF+D) are treated as contiguous ones.
The maximum data record size of 61440 bytes recommended by the EDF specs is not enforced.
To write an EDF with a non-integer seconds duration, the data record duration has to be manually set to an appropriate value.
Slicing an EDF to a timespan that is not an integer multiple of the data record duration does not work.
BDF files (BioSemi) are not supported.
Contributing#
Contributions are welcome and highly appreciated. Check out the contributing guidelines to get started.
Usage#
Further information is available in the API reference and usage examples.
To read an EDF from a file, use edfio.read_edf
:
from edfio import read_edf
edf = read_edf("example.edf")
A new EDF can be created and written to a file as follows:
import numpy as np
from edfio import Edf, EdfSignal
edf = Edf(
[
EdfSignal(np.random.randn(30 * 256), sampling_frequency=256, label="EEG Fpz"),
EdfSignal(np.random.randn(30), sampling_frequency=1, label="Body Temp"),
]
)
edf.write("example.edf")