如何使用MNE-python批量读取同目录多个.EDF文件并合并数据
MNE-Python 批量读取同目录EDF文件并拼接实现方案
批量读取拼接失败基本都是两个原因:一是没有正确遍历拿到目录下所有EDF文件的有效路径,二是不同被试文件的通道配置、采样率不匹配导致拼接报错,按以下步骤操作即可:
步骤1:自动遍历获取目录下所有EDF文件路径
不要手动逐个写文件路径,用路径匹配自动获取,先确认拿到全部25个文件的路径:
from pathlib import Path import mne # 替换为你存放25个EDF文件的文件夹实际路径 edf_folder = Path("你的EDF存储文件夹路径") # 匹配目录下所有.edf后缀文件,按文件名排序避免顺序错乱 raw_file_paths = sorted(edf_folder.glob("*.edf")) # 先打印校验文件数量和文件名 print(f"当前匹配到EDF文件数:{len(raw_file_paths)}") for path in raw_file_paths: print(path.name)
注意:如果是Mac/Linux系统,文件名区分大小写,若你的文件后缀是大写.EDF,把匹配规则改成*.EDF即可
步骤2:批量加载EDF文件,提前统一配置
加载过程中统一处理通道、采样率,避免后续拼接报错:
raw_list = [] target_sfreq = 250 # 按需改成你需要的统一采样率 for file_path in raw_file_paths: # 读取单个EDF,加载到内存 raw = mne.io.read_raw_edf(file_path, preload=True, verbose=False) # 可选:只保留EEG通道,剔除EMG/EOG等不需要的通道 # raw.pick_types(eeg=True) # 统一重采样到固定采样率,避免采样率不一致报错 raw.resample(target_sfreq) # 可选:如果存在通道名大小写、命名不统一的问题,在这里统一重命名 # 比如把所有通道名转为大写: # raw.rename_channels({ch:ch.upper() for ch in raw.ch_names}) raw_list.append(raw)
步骤3:拼接所有被试数据
用MNE内置的raw拼接方法完成合并:
# 拼接所有加载完成的raw对象 merged_raw = mne.concatenate_raws(raw_list, preload=True) # 后续可以直接获取合并后的全量数据、通道信息 all_data = merged_raw.get_data() all_channels = merged_raw.ch_names print(f"合并后数据总时长:{merged_raw.times[-1]:.2f} 秒")
常见报错排查
- 提示找不到文件:检查填写的文件夹路径是否正确,确认文件后缀匹配规则和实际文件一致
- 提示通道不匹配:逐个打印每个raw的
ch_names对比,删除多余通道、统一不一致的通道命名,确保所有待拼接文件的通道数量、名称完全一致 - 提示采样率不匹配:确保所有文件都经过重采样步骤,统一到相同采样率后再拼接
内容的提问来源于stack exchange,提问作者Abdul Kader
相关产品推荐
相关产品推荐

