Matlab - 使用保存时出错无法创建“_”,因为“_____”不存在

Matlab - Error using save Cannot create '_' because '_____' does not exist

我在元胞数组中有一些数据,

data2={[50,1;49,1;26,1];...
    [36,2;12,2;37,2;24,2;47.3,2];}

和另一个元胞数组中的名称,

names2={'xxx/01-ab-07c-0fD3/0';'xxx/01-ab-07s-0fD3/6';}

我想提取数据的一个子集,

data2_subset=data2{1,:}(:,1);

然后是一个临时文件名,

tempname2=char(names2(2));

使用

将子集保存到文本文件
save (tempname2, 'data2_subset', '-ASCII');

但我收到此错误消息:_

Error using save
Cannot create '6' because 'xxx/01-ab-07s-0fD3' does not exist.

为了试图理解正在发生的事情,我创建了一个名称更简单的模拟数据集:

names={'12-05';'14-03'};
data={[50,1;29,1;25,1];[35,2;22,2;16,2;38,2];[40,3;32,3;10,3;44,3;43,3];};
data_subset=data{1,:}(:,1);
tempname=char(names(2));
save (tempname, 'data_subset', '-ASCII');

在这种情况下,保存命令可以正常工作。

不幸的是,我仍然不明白第一种情况的问题所在。关于正在发生的事情以及可能的解决方案有什么建议吗?

MATLAB 将正斜杠 (/) 解释为目录分隔符,将 6 解释为预期的文件名(您的第二个示例没有此斜杠问题)。 由于相对目录树 xxx/01-ab-07s-0fD3/ 不存在,MATLAB 无法创建文件。

要解决此问题,您可以使用 mkdir():

预先创建目录
>> pieces = strsplit(tempname2,'/');
>> mkdir(pieces{1:2});
>> save(tempname2, 'data2_subset', '-ASCII');

或者用其他良性符号替换 /,例如 _:

>> tempname3= strrep(tempname2,'/','_');
>> save (tempname3, 'data2_subset', '-ASCII');

(对我有用)。