Matlab读取文件夹下所有文件名,并实现合并

最近用Matlab处理文本遇到一个很棘手的问题。
问题:用Matlab实现某一个文件夹下所有子文件夹名的读取,然后通过for循环,把子文件夹名和父级目录合并,形成一个完整的路径,再利用fopen打开这个子文件夹,对子文件夹下的所有文件进行读写操作。
想法:用dir函数实现文件夹名的读取,再通过sprintf实现路径的合并。
困难:dir函数得到的是结构体数组,但是父级目录需要通过元胞数组进行复制,这两种数组转换的原理并不是很清晰,或者说是否有更简单直接的方法,还请不吝赐教,谢谢。


matlab
% 设置父级目录
parent_dir = 'C:\example\';% 获取所有子文件夹名
sub_dirs = dir(parent_dir);
sub_dirs = sub_dirs([sub_dirs.isdir]); % 只保留文件夹
sub_dirs = sub_dirs(3:end); % 去除 . 和 ..% 遍历所有子文件夹
for i = 1:length(sub_dirs)
    % 获取子文件夹名
    sub_dir_name = sub_dirs(i).name;
    
    % 合并路径
    sub_dir_path = sprintf('%s%s\\', parent_dir, sub_dir_name);
    
    % 打开子文件夹
    sub_dir = dir(sub_dir_path);
    
    % 遍历子文件夹下的所有文件
    for j = 1:length(sub_dir)
        % 获取文件名
        file_name = sub_dir(j).name;
        
        % 排除 . 和 ..
        if strcmp(file_name, '.') || strcmp(file_name, '..')
            continue;
        end
        
        % 合并路径
        file_path = sprintf('%s%s', sub_dir_path, file_name);
        
        % 打开文件
        fid = fopen(file_path, 'r');
        
        % 读写操作
        % ...
        
        % 关闭文件
        fclose(fid);
    end
end
这段代码首先设置了父级目录,然后使用dir函数获取所有子文件夹名,并遍历所有子文件夹。在遍历每个子文件夹时,使用sprintf函数将子文件夹名和父级目录合并成完整路径,并使用dir函数获取子文件夹下的所有文件。在遍历每个文件时,使用sprintf函数将文件名和子文件夹路径合并成完整路径,并使用fopen函数打开文件进行读写操作。最后使用fclose函数关闭文件。

可以使用dir函数获取当前文件夹下的所有子文件夹,然后利用for循环遍历每个子文件夹,将其与父级目录合并成完整路径,最后再利用fopen函数对子文件夹下的所有文件进行读写操作。

具体实现代码如下:

% 获取当前文件夹下的所有子文件夹
subfolders = dir('*/');
% 遍历每个子文件夹进行操作
for i = 1:length(subfolders)
    % 将子文件夹名与父级目录合并成完整路径
    folder_path = fullfile(subfolders(i).folder, subfolders(i).name);
    % 打开子文件夹
    folder = fopen(folder_path);
    % 对子文件夹下的所有文件进行读写操作,例如:
    files = dir(fullfile(folder_path, '*.txt'));
    for j = 1:length(files)
        file_path = fullfile(files(j).folder, files(j).name);
        % 读取文件内容
        content = fileread(file_path);
        % 写入文件内容
        fwrite(folder, content);
    end
    % 关闭子文件夹
    fclose(folder);
end


其中,fullfile函数可以将多个字符串合并成一个完整路径,dir函数返回的结构体数组中,folder字段表示文件夹所在的父级目录,name字段表示文件夹名。而元胞数组可以通过{}操作符访问其中的元素,将其转换为字符串类型。

以下内容部分参考ChatGPT模型:


可以使用dir函数获取文件夹下的所有文件和文件夹的信息,然后通过判断是否为文件夹来获取子文件夹的路径。具体代码如下:

parent_folder = 'path/to/parent/folder'; % 父级目录
files = dir(parent_folder); % 获取父级目录下所有文件和文件夹的信息
for i = 1:length(files)
    file_name = files(i).name;
    if strcmp(file_name, '.') || strcmp(file_name, '..') % 排除当前目录和上级目录
        continue;
    end
    file_path = fullfile(parent_folder, file_name); % 当前文件或文件夹的完整路径
    if files(i).isdir % 如果是文件夹
        sub_folder = file_path; % 子文件夹路径
        % 对子文件夹下的所有文件进行读写操作
        sub_files = dir(sub_folder);
        for j = 1:length(sub_files)
            sub_file_name = sub_files(j).name;
            if strcmp(sub_file_name, '.') || strcmp(sub_file_name, '..') % 排除当前目录和上级目录
                continue;
            end
            sub_file_path = fullfile(sub_folder, sub_file_name); % 当前文件的完整路径
            % 读写操作
        end
    else % 如果是文件
        % 读写操作
    end
end

其中,fullfile函数可以将两个路径组合成一个完整的路径,避免了手动添加斜杠或反斜杠的问题。isdir字段可以判断当前文件或文件夹是否是文件夹。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快

不知道你这个问题是否已经解决, 如果还没有解决的话:


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^