加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【转】MATLAB遍历子文件夹及其下文件

(2015-07-30 11:11:15)
标签:

matlab

遍历子文件夹

分类: 编程

本文转自http://m.blog.csdn.net/blog/u012675539/43671663#comment

MATLAB遍历子文件夹及其下文件

以前从未遇到过用MATLAB批处理文件的情况,此次项目需要批量将二进制数据文件导入matlab进行svm分类,现将matlab遍历子文件夹及其文件的方法记录下来。


文件目录结构


/maindir
    |-- subdir1
        |-- datafile1.dat
        |-- datafile2.dat
    |-- subdir2
        |-- datafiel3.dat
        |-- datafiel4.dat
    |-- subdir3
        |-- datafile5.dat
        |-- datafile6.dat

主文件夹maindir下含有三个子文件夹,子文件夹分别包含两个二进制数据文件

函数dir

可以使用函数dir,D = DIR('directory_name')返回一个结构数组,包含了文件夹directory_name下的子文件夹和子文件的一些信息,第1个成员是文件名,第4个成员表示是否为文件夹。

要注意的是第1个数组元素和第2个数组元素分别是’.’和’..’,表示当前目录和上层目录。

代码实现


maindir = 'D:\MATLAB\project';
subdir  = dir( maindir );

for i = 1 : length( subdir )
    if( isequal( subdir( i ).name, '.' )||...
        isequal( subdir( i ).name, '..')||...
        ~subdir( i ).isdir)               % 如果不是目录则跳过
        continue;
    end
    subdirpath = fullfile( maindir, subdir( i ).name, '*.dat' );
    dat = dir( subdirpath )               % 子文件夹下找后缀为dat的文件

    for j = 1 : length( dat )
        datpath = fullfile( maindir, subdir( i ).name, dat( j ).name);
        fid = fopen( datpath );
        % 此处添加你的对文件读写操作 %
    end
end

函数uigetdir

由于前面maindir需要指定路径,可能不是太方便。

使用uigetdir可以方便的通过对话框选择文件夹,返回值为文件夹路径名。代码如下:


maindir = uigetdir( '选择一个文件夹' );


上面的例子比较简单,只涉及到两层目录以及指定格式的文件。

对于多层目录,以及多种格式文件的处理,则可以采用层次遍历与深度遍历两种方法实现。具体操作及例子见连接MATLAB对文件夹的层次遍历和深度遍历,不再详细阐述。

下面转自http://blog.csdn.net/guoxiaojie_415/article/details/21317323

Matlab对文件夹的层次遍历和深度遍历 

最近做一个项目,由于数据分别放在不同的文件夹中,对大量数据文件“打开->复制->粘贴”,觉得很费事,于是就写了对基于Matlab的文件夹遍历。文价夹遍历有两种方式,即层次遍历和深度遍历。个人比较倾向用层次遍历的方法,因为深度遍历要用到递归,当文件目录比较深的时候可能会出现栈溢出的现象(当然这只是个极端的情况),而且必须要做成一个函数,若需要记录每个文件的路径,就比较麻烦!而层次遍历思路相对简单,易于理解,废话不多说,直接贴上代码:

 

1、基于matlab的深度优先遍历:

 

function RenameFile( strPath )
    path=strPath;
    Files = dir(fullfile( path,'*.*'));
    LengthFiles = length(Files);
    for iCount = 1:LengthFiles    % 判断是否是文件夹    
        name = Files(iCount).name;    
        if name=='.'        
            continue;    
        end
        s = [path  name '/'];        %遍历文件   
        Folders = dir(fullfile( s,'*.*'));    
        Length= length(Folders);        
        for iCount = 1:Length;          
            if strcmp(Folders(iCount).name, '.') | ...
               strcmp(Folders(iCount).name, '..')
                continue;
            end
            %对文件进行操作
            Folders(iCount).name
        end
    end
end

 

 

2、基于Matlab的层次遍历(广度优先遍历):

 %定义两数组,分别保存文件和路径
mFiles = cell(0,0);
mPath  = cell(0,0);

mPath{1}='./';
[r,c] = size(mPath);
while c ~= 0
    strPath = mPath{1};
    Files = dir(fullfile( strPath,'*.*'));
    LengthFiles = length(Files);
    if LengthFiles == 0
        break;
    end
    mPath(1)=[];
    iCount = 1;
    while LengthFiles>0
        if Files(iCount).isdir==1
            if Files(iCount).name ~='.'
                filePath = [strPath  Files(iCount).name '/'];
                [r,c] = size(mPath);
                mPath{c+1}= filePath;
            end
        else
            filePath = [strPath  Files(iCount).name];
            [row,col] = size(mFiles);
            mFiles{col+1}=filePath;
        end
        
        LengthFiles = LengthFiles-1;
        iCount = iCount+1;
    end
    [r,c] = size(mPath);
end

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有