MATLAB技巧:遍历文件夹下的文件‌

做测试,离不开的是数据的整理和归档。最近在做相机底片辐射定标的时候得到的一组测试结果,为了测试结果的整齐,测试人员(算我一个)把结果分装在了200多个子文件夹,而这200多个子文件夹又分装在5个不同的上层文件夹中……

5个上层文件夹之一,内含151个子文件夹,和一个说明文档

然后我的任务是,遍历它们,找出其中有缺陷的图片……

上次这活儿三个人干了三天……

想想就害怕……

现在我长记性了。。。我要把重复劳动都推给MATLAB!

话不多说,上代码:遍历文件夹下所有的tif文件

%遍历data_path文件夹下所有文件名中包含keyword的tif文件,并做报表Report.xls

%返回counter是遍历到文件的数目,同时用于递归存档

function counter=ergodic(data_path,counter,keyword)

    report_file='Report.xls';%报表名称

    data_dir=dir([data_path,'\',keyword,'*.tif']);%获取文件夹中的tif文件名

    Item={'序号','路径','文件名'};%生成报表

    xlswrite(report_file,Item,1,'A1');%在Excel文件report中的第counter行记录下Item

    for k=1:length(data_dir)%遍历data_path文件夹下的tif文件

        if ~isempty(strfind(data_dir(k).name,'.tif'))%实际上这步筛选与前面是重复的

            counter=counter+1;

            Item={counter-1,data_path,data_dir(k).name};%依次是 序号 路径 文件名

            xlswrite(report_file,Item,1,['A',num2str(counter)]);%在Excel文件report中的第counter行记录下Item

            if mod(counter,100)==1,counter,end%时不时地输出一下,看看进度

        end

    end

    %下面遍历data_path文件夹下的子文件夹

    data_dir=dir(data_path);%获取文件结构

    for k=1:length(data_dir)

        %Windows文件夹下会有两个隐藏文件夹,没什么用,躲开就好

        %data_dir(k).name是文件名或者子文件夹名,如果是文件名,则data_dir(k).isdir是false

        if data_dir(k).isdir && ~isequal(data_dir(k).name,'.') && ~isequal(data_dir(k).name,'..')

            counter=ergodic([data_path,'\',data_dir(k).name],counter,keyword);%递归遍历各子文件夹

        end

    end

end

使用方法举例:

>> fp='F:\Radiation Calibration\测试数据1';%存放数据的文件夹

>> ergodic(fp,1,'*') %数字1是记录用的参数,可以输入任意大于或等于1的整数,星号是通配符

这样,我们的Report.xls文件就生成好了(结果会MATLAB的工作目录下),文件中包含着各tif文件的报表,可以读取这个Report,进而操作各个tif。也可以直接把操作写到代码中的“xlswrite(report_file,Item,1,['A',num2str(counter)]);”位置(正是为了这个用法,代码中使用了低效的for循环里反复进出文件操作的方式存储Excel,而没有采用更快捷的矩阵方式进行存储)。追求代码规整的话就先生成Report再读取文件进行操作,这样不容易乱(即只许加不许改原则);对于小型任务则考虑直接在代码里改,乱了点不过更方便,对于非专业非工程性质的软件工作,改代码并不比加代码low。

生成的Report.xls

tips:代码中xlswrite(report_file,Item,1,['A',num2str(counter)]);”是记录到Excel的函数,其中:

第一个参数report_file是记录到的文件名,不包含路径时默认为MATLAB当前工作路径

第二个参数Item是被记录的内容,cell形式,每个胞元占生成的Excel表格中的一格

第三个参数1是Excel的sheet号,写成数字n时会记录到Excel的“Sheet n”分页中,写成字符串时,Excel会建立一个以该字符串为名字的分页,然后再往里面存东西

最后一个参数是一个字符串,表示起始位置,写成'A1'就会在Excel的'A1'位置起始

【end】

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空