edfrd是一个python 3软件库,用于读取和写入edf文件。
edfrd的Python项目详细描述
edfrd
edfrd是一个python 3软件库,用于read和writeedf文件。
它被设计为一个低级库,在任何可能的情况下都不会解释edf数据。因此,EDFRD可以 读取文件,即使头中包含非标准值。
使用numpy将数据记录加载为int16
数组。
安装
pip3 install --user edfrd
读取EDF标题和数据记录
fromedfrdimportread_header,read_data_recordsfile_path='PATH/TO/FILE.edf'header=read_header(file_path)print(header)fordata_recordinread_data_records(file_path,header):# generator# iterate through data_recordsbreakforsignalindata_record:# iterate through signal arrays of a single data_recordprint(signal.size)forsignal_header,signalinzip(header.signals,data_record):# iterate through signal headers and signal arraysprint(signal_header.label,signal.size)
如果EDF文件的头没有正确指定数据记录的数量,可以使用以下选项 从文件大小计算。
header=read_header(file_path,calculate_number_of_data_records=True)
您可以尝试将startdate_of_recording
和starttime_of_recording
解析为整数元组。如果解析失败
将返回原始字符串。
header=read_header(file_path,parse_date_time=True)day,month,year=header.startdate_of_recordinghours,minutes,seconds=header.starttime_of_recording
可以通过指定可选的start
或end
索引来限制读取的数据记录数。
fordata_recordinread_data_records(file_path,header,start=0,end=header.number_of_data_records):break
要处理比数据记录提供的更大的信号块,请考虑创建一个新的numpy数组作为
buffer
。
importnumpyasnpfromedfrdimportread_header,read_data_recordsfile_path='PATH/TO/FILE.edf'header=read_header(file_path)start,end=2,4signal_index=0signal_header=header.signals[signal_index]buffer_length=(end-start)*signal_header.nr_of_samples_in_each_data_recordbuffer=np.empty(buffer_length,dtype=np.int16)pointer=0fordata_recordinread_data_records(start,end):buffer[pointer:pointer+signal_header.nr_of_samples_in_each_data_record]=data_record[signal_index]pointer+=signal_header.nr_of_samples_in_each_data_recordprint(buffer)
您还可以传递文件描述符(fr
),而不是字符串(file_path
)。注意read_data_records
将
从当前字节位置继续,其中read_header
已停止,而不执行额外的查找操作。
withopen(file_path,'rb')asfr:header=read_header(fr)fordata_recordinread_data_records(fr,header):break
写入EDF头和数据记录
fromedfrdimportread_header,read_data_records,write_header,write_data_recordsfile_path='PATH/TO/FILE.edf'new_file_path='PATH/TO/NEW_FILE.edf'header=read_header(file_path)data_records=read_data_records(file_path,header)write_header(file_path,header)write_data_records(file_path,data_records)
同样,可以使用文件描述符(fr
和fw
)。
withopen(file_path,'rb')asfr:header=read_header(fr)data_records=read_data_records(fr,header)withopen(new_file_path,'wb')asfw:write_header(fw,header)write_data_records(fw,data_records)