Python读取.set格式的脑电数据出现buffer is too small的问题

在使用Python中的mne包读取.set格式的脑电数据时出现buffer is too small的错误,代码如下所示:

data_path = r"E:\脑电数据处理\JCR\JCR_1.set";
raw = mne.io.read_raw_eeglab(data_path, preload=FALSE)
print(raw)
print(raw.info)

报错的内容如下所示:

img

在网上搜索发现有人出现这个问题是因为脑电数据的描述中出现了中文,他将中文删除即解决了这个问题,但是我将描述中的中文删除了也并没有解决这个问题,删除的方法如下:在eeglab中打开文件,然后选中edit->About this dataset,然后就能看到如下所示的描述,删掉其中的中文乱码,然后重新保存一次数据集,即可得到不含中文描述的文件。

img

在指定编码方式为 "utf-8" 时,问题没有解决:

raw = mne.io.read_raw_eeglab(data_path, preload=False, uint16_codec='utf-8')

在指定编码方式为 "latin1" 时,出现了新的问题:发生异常: ValueError
Could not find EEG array in the .set file.

raw = mne.io.read_raw_eeglab(data_path, preload=False, uint16_codec='latin1')

问题如下所示:

img

另外,已经尝试过utf-8,utf-16,GBK,GB2312,ISO-8859-1,Unicode,GB18030,ASCII编码方式,都无法解决问题

可以用间接的方法解决问题,虽然Python无法读取.set文件,但是我可以用eeglab读出.set文件里面的数据,然后将其转换为.mat格式的文件,我就可以用Python处理.mat格式的数据了,然后重新导入电极名称和电极文件就可以了

请问答主解决了吗,我也遇到这个问题了

我之前也是这个问题,然后解决办法是两步
第一,raw_data = mne.io.read_epochs_eeglab(data_path, uint16_codec='latin1')
第二,运行会报错说float型无法迭代,更改eeglab中的代码
for item in list(zip(*[list(eeg.chaninfo['nodatchans'].values())])):
然后就运行成功了。你可以试试

uint16_codec="latin1" on line 203 of file \lib\site-packages\scipy\io\matlab\mio5.py

我一开始也是这样的,后来发现好像使用eeglab未处理过的set文件,比如它自带的那个set文件eeglab_data.set就不会出现该问题了

我也遇到了这个问题,不知道现在还有没有好的解决方法,直接读取set数据的

查了一下,感觉是不是应该指定一下编码

raw = mne.io.read_raw_eeglab(data_path, preload=False, uint16_codec = 'gbk')
# 或者
raw = mne.io.read_raw_eeglab(data_path, preload=False, uint16_codec = 'utf-8')

参考:https://mne.tools/dev/generated/mne.io.read_raw_eeglab.html