matlab文件复制、剪切、删除及caffe应用

实现:

% 从data目录中复制指定类型的文件到目录copydata中然后再剪切到movedata中,再找到符合某个条件的文件并删除
data='K:\test\1'; 
copydata='K:\test\2'; 
movedata='K:\test\3'; 
subDir=dir(data);
len = length(subDir);
disp('begin copy files..');
for i=3:len
    imgNames = dir(strcat(data,'\',subDir(i).name));
    a=[copydata,'\',subDir(i).name];
    %先将文件a复制到文件夹2里面,然后再将文件夹2中的文件a再剪切到文件夹3
    copyfile([data,'\',subDir(i).name],a);
    movefile(a,[movedata,'\',subDir(i).name]);
end
disp('end');
files=dir(movedata);
filenum=length(files);
for curfile=3:filenum
    a=strfind(files(curfile).name,'-');%寻找文件名有'-'符号的文件进行删除
    if(~isempty(a))
      delete([movedata,'\',files(curfile).name]);
    end 
end


一个修改文件名的代码(为符合caffe的识别):

clear;close all;clc;
%文件命名规则:col+'_'+视频序号+'-'+数据位置+'-'+分割位置标记+'-'+帧号(符合caffe的识别)
%%
%程序设计上考虑数据保存的实际情况,数据根据各个类别放在不同的文件夹里面。
%所以程序设计上,就是读取路径文件夹下面的所有子文件夹的数据,然后改名
%每次运行程序,需要修改的变量如下
changeVedio='178';
fgwzbj='zz';
dirPath='L:\seg\分类';%数据路径
%%
%读取文件夹列表,但这种方式读取会保留原文件.(在结构体中第一个)和上一层目录..(在结构体第二个)。所以真正的数据文件夹从第3个开始
dirList=dir(dirPath);
countList=length(dirList);%文件夹个数
for numList=3:countList%文件夹从3开始,目录中.和..在第一和第二,应该是某种规则
    %根据这个过滤掉在此文件夹可能存在的txt文件
    %由于这里面保存数据的文件夹都是0,1,2,3..所有用了下面的判断
    if(length(dirList(numList).name)>=3)
        continue;
    end
    fileNameList=dir([dirPath,'\',dirList(numList).name]);%读取子文件夹中的图片
    fileSum=length(fileNameList);%统计子文件夹中的文件个数
    
    for fileNum=3:fileSum%文件从3开始
        %由于对于不同的视频改写的文件名不同,所以要先进行判断,到底是不是要改的文件
        %原始图像的文件名为类似于178 4_000001.jpg形式的
        %
        [spxh,~]=strtok(fileNameList(fileNum).name);%由于前一个程序设定的命名规则,所以由默认的空格符号分割文件名,得到前面的视频序号
        %用函数strcmpi判断两个字符串是否相等,函数strcmpi相等输出1,否则输出0
        %如果不相等,即不是要处理的数据,进入下一个循环
        if strcmpi(spxh,changeVedio)==0
            continue;
        end
        realName=[dirPath,'\',dirList(numList).name,'\',fileNameList(fileNum).name];%依次得到具体图片文件的完整路径
        %前178 4_000001.jpg。文件命名规则:视频序号+空格+数据位置+'_'+视频帧号。
        %后col_185-4-zz-_000413.jpg。文件命名规则:col+'_'+视频序号+'-'+数据位置+'-'+分割位置标记+'-'+帧号
        %想改成的文件名。
        sjwz=fileNameList(fileNum).name(5);
        zh=fileNameList(fileNum).name(6:end);
        changeName=[dirPath,'\',dirList(numList).name,'\','col','_',spxh,'-',sjwz,'-',fgwzbj,'-',zh];%修改后具体图片文件的完整路径
        %%%主要就是下面这句更改文件名
        movefile(realName,changeName);
    end
end
%%

下面是一段生成label的代码:

clear all;clc;

% 写train的label
path='L:\seg\分类\11\train';
filedir=dir(path);%读取目录
countdir=length(filedir);
fid = fopen([path,'\','train.txt'], 'w');%打开文本文件
for numdir=3:countdir
    file=dir([path,'\',filedir(numdir).name])%读取文件
    countfile=length(file);
    for numfile=3:countfile
        fprintf(fid,'%s', [filedir(numdir).name,'/',file(numfile).name]);
        fprintf(fid,'%s', ' ');%要注意这单独就是用一个空格分隔
        fprintf(fid,'%d', str2num(file(numfile).name(1)));%加入label,注意这里加入了一个字符串转换
        fprintf(fid,'\n');%换行
    end
end
fclose(fid);%关闭文本文件
fclose('all');

文件夹val下面的文件夹里面的图片依次resize固定尺寸到固定目录:

%在同样的文件夹结构、同样的位置
%把指定文件夹以同样的图片类型都转化为32*32的图片
clear;close all;clc;

pathRead='L:\seg\分类\11\val';
pathSave='L:\seg\分类\11\val\guiyi';
dirList=dir(pathRead);%读取文件夹列表,这种方式读取会保留原文件.(在结构体中第一个)和上一层目录..(在结构体第二个)
countList=length(dirList);%文件夹个数
for numList=3:countList%文件夹从3开始
    %根据这个过滤掉在此文件夹可能的train.txt文件
    %由于这里面保存数据的文件夹都是0,1,2,3..所有用了下面的判断
    if(length(dirList(numList).name)>=2)
        continue;
    end
    fileName=dir([pathRead,'\',dirList(numList).name]);%读取子文件夹中的图片
    fileSum=length(fileName);%统计子文件夹中的文件个数
    
    %在存储路径,创建对应的文件夹
    pathCreDir=[pathSave,'\',dirList(numList).name,'\'];
    mkdir(pathCreDir);
    
    for fileNum=3:fileSum%文件从3开始
        tempName=[pathRead,'\',dirList(numList).name,'\',fileName(fileNum).name];%依次得到具体图片文件的完整路径
        temp=imread(tempName);%读入图片
        normtemp=imresize(temp,[32 32]);%归一化图片,尺寸全部改为32*32
        %保存在和源文件一样的对应文件夹内,按同样的文件名、文件类型保存
        imwrite(normtemp,[pathCreDir,fileName(fileNum).name]);
    end
end



你可能感兴趣的:(Matlab点滴)