{ "info": { "author": "Christoph Jansen", "author_email": "Christoph.Jansen@htw-berlin.de", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# edfrd\n\nedfrd is a Python 3 software library to **read** and **write** EDF files.\n\nIt is designed as a low-level library, that does not interpret the EDF data whenever possible. Therefore, edfrd can\nread files even if non-standard values are contained in the header.\n\nData records are loaded as `int16` arrays using numpy.\n\n\n## Installation\n\n```bash\npip3 install --user edfrd\n```\n\n\n## Reading EDF Header and Data Records\n\n```python\nfrom edfrd import read_header, read_data_records\n\nfile_path = 'PATH/TO/FILE.edf'\n\nheader = read_header(file_path)\nprint(header)\n\nfor data_record in read_data_records(file_path, header): # generator\n # iterate through data_records\n break\n\nfor signal in data_record:\n # iterate through signal arrays of a single data_record\n print(signal.size)\n\nfor signal_header, signal in zip(header.signals, data_record):\n # iterate through signal headers and signal arrays\n print(signal_header.label, signal.size)\n```\n\nIf the header of your EDF file does not correctly specifiy the number of data records, you can use the following option\nto calculate it from the file size.\n\n```python\nheader = read_header(file_path, calculate_number_of_data_records=True)\n```\n\nYou can try parsing the `startdate_of_recording` and `starttime_of_recording` as integer tuples. If parsing fails the\noriginal string will be returned.\n\n```python\nheader = read_header(file_path, parse_date_time=True)\n\nday, month, year = header.startdate_of_recording\nhours, minutes, seconds = header.starttime_of_recording\n```\n\nThe number of data records being read can be limited by specifying an optional `start` or `end` index.\n\n```python\nfor data_record in read_data_records(file_path, header, start=0, end=header.number_of_data_records):\n break\n```\n\nTo work with larger chunks of a signal than provided by a data record, consider creating a new numpy array as a\n`buffer`.\n\n```python\nimport numpy as np\nfrom edfrd import read_header, read_data_records\n\nfile_path = 'PATH/TO/FILE.edf'\n\nheader = read_header(file_path)\nstart, end = 2, 4\nsignal_index = 0\nsignal_header = header.signals[signal_index]\nbuffer_length = (end - start) * signal_header.nr_of_samples_in_each_data_record\nbuffer = np.empty(buffer_length, dtype=np.int16)\npointer = 0\n\nfor data_record in read_data_records(start, end):\n buffer[pointer:pointer+signal_header.nr_of_samples_in_each_data_record] = data_record[signal_index]\n pointer += signal_header.nr_of_samples_in_each_data_record\n\nprint(buffer)\n```\n\nYou can also pass a file descriptor (`fr`) instead of a string (`file_path`). Note that `read_data_records` will\ncontinue from the current byte position, where `read_header` stopped, without performing an additional seek operation.\n\n```python\nwith open(file_path, 'rb') as fr:\n header = read_header(fr)\n\n for data_record in read_data_records(fr, header):\n break\n```\n\n\n## Writing EDF Header and Data Records\n\n```python\nfrom edfrd import read_header, read_data_records, write_header, write_data_records\n\nfile_path = 'PATH/TO/FILE.edf'\nnew_file_path = 'PATH/TO/NEW_FILE.edf'\n\nheader = read_header(file_path)\ndata_records = read_data_records(file_path, header)\nwrite_header(file_path, header)\nwrite_data_records(file_path, data_records)\n```\n\nAgain, using file descriptors (`fr` and `fw`) is possible.\n\n```python\nwith open(file_path, 'rb') as fr:\n header = read_header(fr)\n data_records = read_data_records(fr, header)\n \n with open(new_file_path, 'wb') as fw:\n write_header(fw, header)\n write_data_records(fw, data_records)\n```\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://cbmi.htw-berlin.de/", "keywords": "", "license": "LGPL-3.0", "maintainer": "Christoph Jansen", "maintainer_email": "Christoph.Jansen@htw-berlin.de", "name": "edfrd", "package_url": "https://pypi.org/project/edfrd/", "platform": "", "project_url": "https://pypi.org/project/edfrd/", "project_urls": { "Homepage": "https://cbmi.htw-berlin.de/", "Repository": "https://github.com/somnonetz/edfrd" }, "release_url": "https://pypi.org/project/edfrd/0.7/", "requires_dist": [ "numpy (>=1.15,<2.0)" ], "requires_python": ">=3.4,<4.0", "summary": "edfrd is a Python 3 software library to read and write EDF files.", "version": "0.7" }, "last_serial": 5710341, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "a45bce6597e5de36792af37725af848b", "sha256": "91b067e8732205932f6206cd6d24f81034ce57c5734b621d00ce2adcd7ee6697" }, "downloads": -1, "filename": "edfrd-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a45bce6597e5de36792af37725af848b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 11634, "upload_time": "2018-10-17T12:04:34", "url": "https://files.pythonhosted.org/packages/81/81/ebde69bbe4ac596fcf4f88346c5b92985eec8464e3cc4bb88c12990b7140/edfrd-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "61e65f528072045a64157217fb1a2ab6", "sha256": "1d7c16da556e9a69d3f7590db8826b0b2b9003b2e006e4c6f42ff2770a97ae0e" }, "downloads": -1, "filename": "edfrd-0.1.tar.gz", "has_sig": false, "md5_digest": "61e65f528072045a64157217fb1a2ab6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 4602, "upload_time": "2018-10-17T12:04:35", "url": "https://files.pythonhosted.org/packages/2c/d5/c6f0b211e7efc8e032ef039c885a189e1a27056d07b292b3ade035db9ee9/edfrd-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "945eaa02936d0ba2bd53f718715cfc0c", "sha256": "c38f0a552c95a19eb79ce97446af536485e62139f3302384442a73d152d4e714" }, "downloads": -1, "filename": "edfrd-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "945eaa02936d0ba2bd53f718715cfc0c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 12062, "upload_time": "2018-10-17T13:49:13", "url": "https://files.pythonhosted.org/packages/6e/54/ae39105a4ce05a038f82c7ee16781a624050efdb49a1ccedcc2b4b4ab87f/edfrd-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ebeefecb3d0f44550a2757b4bc829844", "sha256": "925cbe573d0bacff04a1bcd627dcea48c35555a4e17241a5d83ec5f03eac5e1e" }, "downloads": -1, "filename": "edfrd-0.2.tar.gz", "has_sig": false, "md5_digest": "ebeefecb3d0f44550a2757b4bc829844", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 4721, "upload_time": "2018-10-17T13:49:14", "url": "https://files.pythonhosted.org/packages/30/eb/96daa396236ff3c81b47285817e23c64dc098b2dd73bd73ce83b418a7817/edfrd-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "54afb54e32ce8e03214660df995b2b86", "sha256": "1dd0b734a92ccf43dad45d92d5708c49d7ede47c90d05180f8155e8f8b9ec039" }, "downloads": -1, "filename": "edfrd-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "54afb54e32ce8e03214660df995b2b86", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 12416, "upload_time": "2018-10-17T18:09:12", "url": "https://files.pythonhosted.org/packages/c1/ea/c446255383898c9ccd7db9d5cfb56fe32e41bb96b50108d1b4eb014c9a3c/edfrd-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3b533c1a1c78d3ca605257d9cfdce891", "sha256": "7de1f0c5f14025cd6d00525425376fb7054996d86105d58307fca4680a798bec" }, "downloads": -1, "filename": "edfrd-0.3.tar.gz", "has_sig": false, "md5_digest": "3b533c1a1c78d3ca605257d9cfdce891", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 4789, "upload_time": "2018-10-17T18:09:14", "url": "https://files.pythonhosted.org/packages/ba/bf/ace455e1b1722bf71785a7bcdf999079643df35fccfb6cfbc0ffe4e91148/edfrd-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "3d2bf99e10f0330fc56fdf5eae4cc5df", "sha256": "f624fa54f88c04e30f915c3dc6beade8bc6fe8b81235102c94a4aaa2e7a162a5" }, "downloads": -1, "filename": "edfrd-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "3d2bf99e10f0330fc56fdf5eae4cc5df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 12597, "upload_time": "2018-10-18T10:24:55", "url": "https://files.pythonhosted.org/packages/3c/c2/fae25a76db50a3806c2d01f0a728f70c0e0d13f6bf8e86ddc278bf9f2a0f/edfrd-0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "62fc9f6cb936dc829a578bf1e034cdc4", "sha256": "0ab119293cdef8812226fd1d8e40a1234b916ebd01386f7c45c3f846b901fb9a" }, "downloads": -1, "filename": "edfrd-0.4.tar.gz", "has_sig": false, "md5_digest": "62fc9f6cb936dc829a578bf1e034cdc4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 4988, "upload_time": "2018-10-18T10:24:56", "url": "https://files.pythonhosted.org/packages/a7/b5/9c7efd2add9ccf06a91ff097a9224a029287cbed296cbc975774e9e830fa/edfrd-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "42d1537236770de985dd1b830ca7c8a7", "sha256": "6998e7dfba1aeb71201214a160e0942bc85e737ddd13ed529edc77d17e9e6a9c" }, "downloads": -1, "filename": "edfrd-0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "42d1537236770de985dd1b830ca7c8a7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 12619, "upload_time": "2018-11-27T21:12:06", "url": "https://files.pythonhosted.org/packages/54/ea/09b9dfc6298bbf59ea5f9be78b29d2119886c92dc438e6f37a6e3f0fc318/edfrd-0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "51d730a307b2a6c2467a2952bbd1c594", "sha256": "1cf4b1e20201603f31ed63ec01a4d5829de01f66dadabba95cb24b7c30628af7" }, "downloads": -1, "filename": "edfrd-0.5.tar.gz", "has_sig": false, "md5_digest": "51d730a307b2a6c2467a2952bbd1c594", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 4986, "upload_time": "2018-11-27T21:12:08", "url": "https://files.pythonhosted.org/packages/98/8f/8f2144e7dcb714a7ede8d97e1247ff614bc37fbfd5ce698ec88a0d8e60c6/edfrd-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "1055c39899a73cb84d3a97d2e72a26c0", "sha256": "1520119e62fe3f7389d6d87db738d119d485b160bfba418219615051c07c17bf" }, "downloads": -1, "filename": "edfrd-0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "1055c39899a73cb84d3a97d2e72a26c0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 5672, "upload_time": "2019-06-28T22:18:12", "url": "https://files.pythonhosted.org/packages/d2/e0/bbeef7b9717425c5a8b33a38484698fad22d61ed151064f05121d2f44ca1/edfrd-0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6878423bf9a36099c6b7738dedb9ac36", "sha256": "094f2077f079268b1851329f70b9f35835caddfd9e363c48d388d8b18154a09b" }, "downloads": -1, "filename": "edfrd-0.6.tar.gz", "has_sig": false, "md5_digest": "6878423bf9a36099c6b7738dedb9ac36", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 5253, "upload_time": "2019-06-28T22:18:14", "url": "https://files.pythonhosted.org/packages/ab/8b/59f833d62c3724346f7c3daf57ee84b6bedd55798916e0344d4709173668/edfrd-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "962b45e6093552a9a305838a2a10a550", "sha256": "e11c364a75ded4b94701fef87184415bb8f04e986fe15126c6c9a95036a2f250" }, "downloads": -1, "filename": "edfrd-0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "962b45e6093552a9a305838a2a10a550", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 7133, "upload_time": "2019-08-21T15:15:41", "url": "https://files.pythonhosted.org/packages/64/b3/fb09e21c5fb091fb2b27d269654b6c0aa79f960ff916d11a90e7d0625686/edfrd-0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7d5eb6253a3ce24a4399de46b69cc85", "sha256": "7bb83cfe355f3a74d72484875df3040d7856f0be90f06f46901ce737389e0a3d" }, "downloads": -1, "filename": "edfrd-0.7.tar.gz", "has_sig": false, "md5_digest": "d7d5eb6253a3ce24a4399de46b69cc85", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 6873, "upload_time": "2019-08-21T15:15:43", "url": "https://files.pythonhosted.org/packages/cc/6b/397e113ae4d12f134a53cd33316f43425d8774ea0cd73ff674926027df24/edfrd-0.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "962b45e6093552a9a305838a2a10a550", "sha256": "e11c364a75ded4b94701fef87184415bb8f04e986fe15126c6c9a95036a2f250" }, "downloads": -1, "filename": "edfrd-0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "962b45e6093552a9a305838a2a10a550", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4,<4.0", "size": 7133, "upload_time": "2019-08-21T15:15:41", "url": "https://files.pythonhosted.org/packages/64/b3/fb09e21c5fb091fb2b27d269654b6c0aa79f960ff916d11a90e7d0625686/edfrd-0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7d5eb6253a3ce24a4399de46b69cc85", "sha256": "7bb83cfe355f3a74d72484875df3040d7856f0be90f06f46901ce737389e0a3d" }, "downloads": -1, "filename": "edfrd-0.7.tar.gz", "has_sig": false, "md5_digest": "d7d5eb6253a3ce24a4399de46b69cc85", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4,<4.0", "size": 6873, "upload_time": "2019-08-21T15:15:43", "url": "https://files.pythonhosted.org/packages/cc/6b/397e113ae4d12f134a53cd33316f43425d8774ea0cd73ff674926027df24/edfrd-0.7.tar.gz" } ] }