You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:27:01