遍历子文件夹目录,而不是使用“cd”和执行calcuations给输出为每个子文件夹

31日视图(30天)
你好所有的,
提前谢谢你的帮助。我尝试不同的方法来得到它,但我不能。
我有一个主要文件夹有三个子文件夹。每个文件夹都有excel文件和我做一些操作这些文件到一个文件夹中。合并所有excel文件,只有相关的列,并创建一个矩阵。
例如:
代码1:cd的F: \
文件= dir (* . csv);
输出= readmatrix(文件(1). name);
x = 2:元素个数(文件)
新= readmatrix(文件(x) . name);
输出= vertcat(输出,新);
结束
= rmmissing输出(输出);
t =[输出(:1)输出(:,3)];
t (: 3 =√(:, 4)。^ 2 + (:, 5)。(:, 6) ^ 2 +。^ 2);
代码2:cd的F: \
文件= dir (* . csv);
输出= readmatrix(文件(1). name);
x = 2:元素个数(文件)
新= readmatrix(文件(x) . name);
输出= vertcat(输出,新);
结束
= rmmissing输出(输出);
t =[输出(:1)输出(:,3)];
因此代码应该像这样工作。
我给的路径主要文件夹在起跑线上的代码。接下来的过程应该做所有的代码。代码应该只selct子文件夹而不是文件出现在主文件夹中。
它应该检查多少子文件夹主文件夹。首先它应该selct第一个文件夹和代码1或2根据子文件夹的名称,给输出t1。之后,它应该去第二个文件夹和做同样的事情。然后最后一个文件夹。
每次我要做此操作在每一个文件夹,把大量的时间当我使用“cd”作为它改变目录。
如:loopover每一子文件夹,根据文件夹的名字如果pump1或pump2使用代码1在这些子文件夹,如果filter1或filter2使用代码2在这些子文件夹。每个文件夹都应该得到t1、t2、t3作为各自的输出保存到工作区。
我试着使用dir, fullfile difierent方式但是它很令人困惑。真的会有帮助如果有人让我知道如何去做。

答案(2)

马修•诺伊”class=
马修•诺伊 2022年3月30日
你好
这是我的建议,你可能需要适应您的特定需求
clc
clearvars
% %定义路径
yourpath = pwd;%或您的具体路径
列表= dir (yourpath);%得到信息当前目录的文件/文件夹
isfile = ~ (list.isdir);%确定索引的文件和文件夹
目录名={列表([list.isdir]) . name};%(包括目录名称。和. .)
目录名=目录名(~ (strcmp (“。”,目录名)| strcmp (“. .”,目录名)));%去除。和. .目录名称的列表
% %演示excel文件
表= 1;%处理指定哪个表(我的演示)——如果需要的话
% %循环在每个文件夹
ci = 1:长度(目录名)%
fileDir = char(目录名(ci));%当前目录的名字
S = dir (fullfile (fileDir,“Sheeta * .xlsx”));%得到的数据文件列表目录根据名称结构“Sheeta * .xlsx”
S = natsortfiles(年代);%文件名排序成自然秩序(matlab没有),看到FEX:
% (https://fr.mathworks.com/matlabcentral/fileexchange/47434-natural-order-filename-sort)
% %循环内部文件夹
k = 1:长度(S)%读取指定表中的数据
data = xlsread (fullfile (fileDir S (k) . name),表);%或者使用结构(S (k)。数据)来存储完整的数据结构
%你自己的代码进行数据处理。这只是我的演示
%现在:
title_str = [fileDir' / '(k) . name' /表:num2str(表));
人物,情节(数据)、标题(title_str);
结束
结束
3评论
马修•诺伊”class=
马修•诺伊 2022年4月1日
你好
我的代码是一个通用的例子——你可以做一些修改:
有一个目录中的所有xls文件列表不包含特定字符的文件名称
取代
S = dir (fullfile (fileDir,“Sheeta * .xlsx”));%得到的数据文件列表目录根据名称结构“Sheeta * .xlsx”
S = dir (fullfile (fileDir));%得到的数据文件目录列表
还的 “这里是一个optionnal参数传递 xlsread ,这也不是强制性的。在默认情况下加载第一个表。如果 xlsread 不适合你有其他选项( readtable )
取代
data = xlsread (fullfile (fileDir S (k) . name),表);
data = xlsread (fullfile (fileDir S (k) . name));
根据上面的解释= >演示代码修改
clc
clearvars
% %定义路径
yourpath = pwd;%或您的具体路径
列表= dir (yourpath);%得到信息当前目录的文件/文件夹
isfile = ~ (list.isdir);%确定索引的文件和文件夹
目录名={列表([list.isdir]) . name};%(包括目录名称。和. .)
目录名=目录名(~ (strcmp (“。”,目录名)| strcmp (“. .”,目录名)));%去除。和. .目录名称的列表
% %循环在每个文件夹
ci = 1:长度(目录名)%
fileDir = char(目录名(ci));%当前目录的名字
S = dir (fullfile (fileDir,“Sheeta * .xlsx”));%得到的数据文件列表目录根据名称结构“Sheeta * .xlsx”
S = natsortfiles(年代);%文件名排序成自然秩序(matlab没有),看到FEX:
% (https://fr.mathworks.com/matlabcentral/fileexchange/47434-natural-order-filename-sort)
% %循环内部文件夹
k = 1:长度(S)%读取指定表中的数据
data = xlsread (fullfile (fileDir S (k) . name));%或者使用结构(S (k)。数据)来存储完整的数据结构
%你自己的代码进行数据处理。这只是我的演示
%现在:
title_str = [fileDir' / '年代(k) . name];
人物,情节(数据)、标题(title_str);
结束
结束

登录置评。


图像分析”class=
图像分析 2022年3月30日
为什么不建立一个fileDatastore你得到所有的CSV文件下面一些顶级文件夹,像什么
%建立fileDatastore
topLevelFolder = pwd;%无论你想要的,就像“C: \ CSV文件”或地方。
filePattern = fullfile (topLevelFolder,‘* . csv‘);
ds = fileDatastore (filePattern,“ReadFcn”@readmatrix)
%提取所有单独的文件名称。他们会有文件夹以及基本的文件名和扩展名。
allFileNames = {ds.Files {:}}’
numCSVFiles =元素个数(allFileNames);
流(' % d文件。\ n”numCSVFiles)
%循环都读成一个变量。
k = 1: numCSVFiles
thisFullFileName = allFileNames {k};
流(“现在阅读% s \ n”thisFullFileName)
data = readmatrix (thisFullFileName);
你想要%但是现在处理数据。
结束
流(做阅读所有% d CSV文件。\ n 'numCSVFiles)
4评论
图像分析”class=
图像分析 2022年3月31日
不,这将是一个非常糟糕的主意,因为你已经学会了。为什么?查看常见问题解答:
我不明白为什么你不能使用数据计算。你为什么要拯救他们?如果你还是这样做了,你可以把数据转换成一个细胞数组:
数据{k} = readmatrix (thisFullFileName);

登录置评。

类别

找到更多的在循环和条件语句帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!