Python使用pyedflib将ECG的EDF格式转TXT时出现报错求助
问题修复及EDF转TXT实现
报错根因
你的代码第8行sigbufs=np.zeros((n, f.getSignalLabels()[0]))中,f.getSignalLabels()[0]返回的是第一个信号的名称字符串,无法作为np.zeros要求的整数维度参数使用,因此触发类型错误。同时原代码中还存在未定义变量x、重复读取信号浪费资源的问题。
修复后的完整代码
import pyedflib import numpy as np import matplotlib.pyplot as plt # 读取EDF文件 f = pyedflib.EdfReader('C:\\Users\\shafi\\PycharmProjects\\pyHrv\\Sample.edf') # 获取信号通道数 n = f.signals_in_file # 获取所有信号标签 signal_labels = f.getSignalLabels() # 获取每个通道的采样点数(默认所有通道采样点数一致) sample_num = f.getNSamples()[0] # 初始化存储数组 sigbufs = np.zeros((n, sample_num)) # 读取所有通道信号 for i in np.arange(n): sigbufs[i, :] = f.readSignal(i) # 可选:绘图查看信号 fig = plt.figure() ax = plt.axes() for i in range(n): ax.plot(sigbufs[i, :], label=signal_labels[i]) ax.legend() plt.show() # 转换为TXT保存:第一行为通道标签,后续每行为一个采样点的各通道数值 output_path = 'Sample_output.txt' with open(output_path, 'w', encoding='utf-8') as f_out: # 写入表头 f_out.write('\t'.join(signal_labels) + '\n') # 逐行写入采样数据 for idx in range(sample_num): line_data = [str(sigbufs[ch, idx]) for ch in range(n)] f_out.write('\t'.join(line_data) + '\n') # 关闭EDF文件句柄 f.close()
额外说明
- 如果你需要按通道单独保存TXT,可以修改输出逻辑,每个通道对应一个TXT文件,单独写入对应通道的信号值即可
- 如果你的EDF文件各通道采样点数不一致,需要逐通道单独创建数组存储,不能统一初始化n行sample_num列的数组
内容的提问来源于stack exchange,提问作者Shafiq Islam
相关产品推荐
相关产品推荐

