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")