创建 mat 文件的文件数据存储在 matlab 中按文件名模式过滤文件
create filedatastore of mat files filtering files by filename pattern in matlab
是否可以通过文件名模式创建 mat 文件过滤文件的文件数据存储?
到目前为止我得到了这个:
fds = fileDatastore(dir_save,'ReadFcn',@load,'FileExtensions','.mat','IncludeSubfolders',true);
f=1;
while hasdata(fds)
disp(num2str(progress(fds)*100)
dataarray = read(fds);
if ~isempty(strfind(fds.Files{f},myPattern))
%% do somthing
end
f=f+1;
end
但是我不会使用的一些 mat 文件非常大,因此会减慢处理速度。
我无法将所有文件移动到 1 个目录,因为我的目录结构如下:
d01/file1.mat
d01/myPatternFile.mat
d01/othefile.mat
d02/file1.mat
d02/myPatternFile.mat
d02/othefile.mat
etc
您可以在 fullfile 的调用中使用通配符。
使用 fileDatastore:
文档中的示例
% No filtering
>> fds = fileDatastore(fullfile(matlabroot,'toolbox','matlab','demos'),'ReadFcn',@load,'FileExtensions','.mat')
fds =
FileDatastore with properties:
Files: {
'E:\MATLAB64\R2018b\toolbox\matlab\demos\accidents.mat';
'E:\MATLAB64\R2018b\toolbox\matlab\demos\airfoil.mat';
'E:\MATLAB64\R2018b\toolbox\matlab\demos\airlineResults.mat'
... and 37 more
}
UniformRead: 0
ReadFcn: @load
AlternateFileSystemRoots: {}
% Filtering for .mat files starting with "w"
>> fds =
fileDatastore(fullfile(matlabroot,'toolbox','matlab','demos','w*'),'ReadFcn',@load,'FileExtensions','.mat')
fds =
FileDatastore with properties:
Files: {
'E:\MATLAB64\R2018b\toolbox\matlab\demos\west0479.mat';
'E:\MATLAB64\R2018b\toolbox\matlab\demos\wind.mat'
}
UniformRead: 0
ReadFcn: @load
AlternateFileSystemRoots: {}
要检查不同的文件夹,请使用两个通配符:
>> !mkdir d01
>> !mkdir d02
>> !touch d01/file1.mat
>> !touch d01/myPatternFile.mat
>> !touch d02/file2.mat
>> !touch d02/myPatternFile.mat
>> fileDatastore(fullfile(pwd,'d*\myPattern*'),'ReadFcn',@load,'FileExtensions','.mat')
ans =
FileDatastore with properties:
Files: {
'H:\Documents133896\d01\myPatternFile.mat';
'H:\Documents133896\d02\myPatternFile.mat'
}
UniformRead: 0
ReadFcn: @load
AlternateFileSystemRoots: {}
是否可以通过文件名模式创建 mat 文件过滤文件的文件数据存储? 到目前为止我得到了这个:
fds = fileDatastore(dir_save,'ReadFcn',@load,'FileExtensions','.mat','IncludeSubfolders',true);
f=1;
while hasdata(fds)
disp(num2str(progress(fds)*100)
dataarray = read(fds);
if ~isempty(strfind(fds.Files{f},myPattern))
%% do somthing
end
f=f+1;
end
但是我不会使用的一些 mat 文件非常大,因此会减慢处理速度。 我无法将所有文件移动到 1 个目录,因为我的目录结构如下:
d01/file1.mat
d01/myPatternFile.mat
d01/othefile.mat
d02/file1.mat
d02/myPatternFile.mat
d02/othefile.mat
etc
您可以在 fullfile 的调用中使用通配符。 使用 fileDatastore:
文档中的示例% No filtering
>> fds = fileDatastore(fullfile(matlabroot,'toolbox','matlab','demos'),'ReadFcn',@load,'FileExtensions','.mat')
fds =
FileDatastore with properties:
Files: {
'E:\MATLAB64\R2018b\toolbox\matlab\demos\accidents.mat';
'E:\MATLAB64\R2018b\toolbox\matlab\demos\airfoil.mat';
'E:\MATLAB64\R2018b\toolbox\matlab\demos\airlineResults.mat'
... and 37 more
}
UniformRead: 0
ReadFcn: @load
AlternateFileSystemRoots: {}
% Filtering for .mat files starting with "w"
>> fds =
fileDatastore(fullfile(matlabroot,'toolbox','matlab','demos','w*'),'ReadFcn',@load,'FileExtensions','.mat')
fds =
FileDatastore with properties:
Files: {
'E:\MATLAB64\R2018b\toolbox\matlab\demos\west0479.mat';
'E:\MATLAB64\R2018b\toolbox\matlab\demos\wind.mat'
}
UniformRead: 0
ReadFcn: @load
AlternateFileSystemRoots: {}
要检查不同的文件夹,请使用两个通配符:
>> !mkdir d01
>> !mkdir d02
>> !touch d01/file1.mat
>> !touch d01/myPatternFile.mat
>> !touch d02/file2.mat
>> !touch d02/myPatternFile.mat
>> fileDatastore(fullfile(pwd,'d*\myPattern*'),'ReadFcn',@load,'FileExtensions','.mat')
ans =
FileDatastore with properties:
Files: {
'H:\Documents133896\d01\myPatternFile.mat';
'H:\Documents133896\d02\myPatternFile.mat'
}
UniformRead: 0
ReadFcn: @load
AlternateFileSystemRoots: {}