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

MNE Python中.mff文件夹与CSV文件路径定位失败问题求助

问题:加载EEG数据时触发FileNotFoundError

我正在使用MNE Python分析感觉诱发电位,电脑中存储着文件夹形式的.mff原始EEG数据,以及记录刺激时长的CSV文件。在预处理阶段加载这两类文件时,出现了以下错误:

Traceback (most recent call last)
Cell In[19], line 20
     11     report.add_code('01-seps.py', title='Code')
     13         # Load raw data
     14 #     raw = mne.io.read_raw_egi(eeg_file)
     15     
     16 #     behav = pd.read_csv(dur_file)
     17     
     18 #         # Get EEG data and durations
     19     eeg_file = opj(basepath, p, 'sub',
---> 20                    [f for f in os.listdir(opj(basepath, p, 'sub')) if '.mff' in f][0])
     22     dur_file = opj(basepath, p, 'sub',
     23                    [f for f in os.listdir(opj(basepath, p, 'sub')) if 'durations' in f][0])

FileNotFoundError: [WinError 3] The system cannot find the path specified: 'D:\\test\\data\\sub-041_20240129_114214.mff\\sub'

我的代码如下:

#path
basepath = 'D:\\test\\data'
derivpath = 'D:\\test\\derivpath'
if not os.path.exists(derivpath):
    os.mkdir(derivpath)

#get the participants 
parts = [s for s in 
        os.listdir(basepath) if 'sub-' in s]
parts.sort() 

visual_inspect = False

#SEP task 
all_evoked = [] 
for p in parts:
    if not os.path.exists(opj(derivpath, p)):
        os.mkdir(opj(derivpath, p))
    
# Initialize report
    report = Report(verbose=False, subject=p,
                    title='SEP report for part ' + p)

    report.add_code('01-seps.py', title='Code')

# Get EEG data and durations
    eeg_file = opj(basepath, p, 'sep',
                   [f for f in os.listdir(opj(basepath, p, 'sep')) if '.mff' in f][0])

    dur_file = opj(basepath, p, 'sep', 
                   [f for f in os.listdir(opj(basepath, p, 'sep')) if 'durations' in f][0])

错误原因

从报错路径D:\\test\\data\\sub-041_20240129_114214.mff\\sub可以看出:你的parts列表错误地将后缀为.mff的文件识别成了参与者文件夹,导致后续拼接路径时,试图在这个.mff文件内部寻找sub(或代码中的sep)子文件夹,而这个路径根本不存在。

解决方案

1. 修正参与者文件夹的筛选逻辑

修改parts的生成代码,只筛选basepath下包含sub-的文件夹,排除掉.mff这类文件:

parts = [s for s in os.listdir(basepath) 
         if 'sub-' in s and os.path.isdir(os.path.join(basepath, s))]
parts.sort()

2. 匹配实际文件路径结构

确认你的文件存储结构:

  • 如果.mff和CSV文件直接放在参与者文件夹(如sub-041_20240129_114214)下,而非sep子文件夹中,需要移除路径中的sep层级:
# 获取EEG数据和时长文件
mff_files = [f for f in os.listdir(opj(basepath, p)) if '.mff' in f]
if not mff_files:
    print(f"未找到参与者{p}的.mff文件,跳过")
    continue
eeg_file = opj(basepath, p, mff_files[0])

dur_files = [f for f in os.listdir(opj(basepath, p)) if 'durations' in f]
if not dur_files:
    print(f"未找到参与者{p}的时长CSV文件,跳过")
    continue
dur_file = opj(basepath, p, dur_files[0])

额外优化建议

避免直接用[0]取列表第一个元素,先判断列表是否为空,防止出现索引越界错误,上面的代码已经加入了这个判断逻辑。


内容的提问来源于stack exchange,提问作者Pouya Rabiei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:22:53