matlab中在可变路径下尽快自动顺序读取或命名文件

matlab中常需要顺序读取或命名文件(或文件夹),以读取文件为例。

文件存放在“E:\disk\Data”中,其中又有50个子文件夹,从“s1”到“s50”,每个文件夹里有10张图片,从“1.jpg”到“10.jpg”。希望读取前40个子文件夹,每个文件夹只读取前5张图片作为训练集,后5张作为测试集,程序如下:

addpath ('E:\disk\Data');
ndocument=40;
npicture=5;
train=0;%取0时读取前5张,取其它值读取后5张

for i=1:ndocument
    i1=mod(i,10); %获得文件夹号码个位,mod(x,y)取模,取x/y的余数,x和y符号不同时,取y的符号
    i0=char(i/10);%在下面的代码中,相当于得到文件夹号码十位(我个人理解i0为i/10整数部分)
    docPath='E:\disk\Data\s';
    
    if(i0~=0)%判断十位是否为零,如果不为零,路径中加上十位
    docPath=strcat(docPath,'0'+i0);%strcat连接的是char型,‘0’为数字0的ASCII码(48),再加上i0(即文件夹号码的十位),即为文件夹号码十位的ASCII码
    end
    docPath=strcat(docPath,'0'+i1);%加上文件夹号码的个位,获得文件夹号码路径
    docPath=strcat(docPath,'\');
    
    Path=docPath;
    for j=1:npicture
        picPath=Path;
        if train==0;%读取前5张
            picPath=strcat(picPath,'0'+j);
        else %读取后5张
            picPath=strcat(picPath,num2str(5+j));%num2str 将数字转换成char型
        end
        
        picPath=strcat(picPath,'.pgm');
        img=imread(picPath);
    end
         
end


其中,
1.需要掌握取余运算mod(x,y),此外rem(x,y)也为取余,但两者有区别: 当x和y的正负号一样的时候,两个函数结果是等同的;当x和y的符号不同时,rem函数结果的符号和x的一样,而mod和y一样。
先将两个数x、y看作是正数,作除法运算
①能整除时,其值为0
②不能整除时,其值=除数×(整商+1)-被除数
例:mod(36,-10)=-4
即:36除以10的整数商为3,加1后为4;其与除数之积为40;再与被数之差为(40-36=4);取除数的符号。所以值为-4。
例:mod(9,1.2)=0.6; 

2.程序识别文件夹号码为‘s1’、‘s2’、's3'、...........、's10'、's11'、.........、's40'
在我以前编号文件或文件夹时,如果是三位数,编号为‘001’、‘002’、.......、‘010’、‘011’、......、‘100’、‘101’即编号位数必须相同,前面有无效的'0',正是由于没有用好: strcat(docPath,'0'+i0);%strcat连接的是char型,‘0’为数字0的ASCII码(48),再加上i0(即文件夹号码的十位),即为文件夹号码十位的ASCII码

利用char字符的ASCII码,可直接编号,例如i0是3,那么'0'+i0为51,ASCII码中51代表字符‘3’,即显示3。
此外,要想获得字符的ASCII码,可利用函数 abs(),例如,输入abs('0'),得到0的ASCII码为48,输入abs('a'),得到字a的ASCII码为97。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值