我有一个脚本,它查看给定目录并抓取所有要处理的文件。 问题是我希望它忽略任何隐藏的(。)文件。我在this和this这样的其他帖子中看到了很多方法,但是我的情况很简单,我认为值得一提,因为我是八音新人。值得一提的是第二个链接很简单,但似乎很奇怪我必须使用for循环来过滤...
这是我的代码:
dirname = strcat(pwd, '/fileset');
files = dir(dirname);
fileidx = find(~[files.isdir]);
for i = 1:length(fileidx)
filename = [dirname, '/', files(fileidx(i)).name];
fid = fopen(filename, 'r');
end
答案 0 :(得分:2)
我曾承诺为第一行“更多的爱”......“那个没有用的”。在这里。
在我研究这个答案之前,有一些有趣的方法来操纵我不知道的单元格阵列...特别是cellfun()
的使用。我将分享我学到的东西。
例如,当您有一个文件名的单元格数组
时fnames = {files.name};
您可以应用正则表达式查找符合特定条件的文件(例如“不以点开头”)
crit = '^[^.]+';
% return cell array of results, [] if no match
rxResult = regexp( fnames, crit );
% loop over all cells, set true if regex matched
nodot = (cellfun('isempty', rxResult)==0);
% The `nodot` array is a logical array telling us which are "good" files.
totalGoodFiles = sum(nodot);
现在你可以使用
fileidx = find(~[files.isdir] & nodot);
另一方面,您已经使用for
循环,因此您可以将测试放在那里(编辑为包含文件计数):
fCount=0;
for i = 1:length(fileidx)
if( files(fileidx(i)).name(1) ~= '.')
filename = [dirname, '/', files(fileidx(i)).name];
fCount = fCount+ 1;
fid = fopen(filename, 'r');
end
end
顺便说一下,有一个函数fullfile()
可以用来连接目录和文件名;它了解用于您的操作系统的正确文件分隔符。非常方便 - 比连接'/'更好。当您尝试在Mac上运行时,它将失败...
进一步 - 内置常量filesep
将返回正确的文件路径分隔符以在您的平台上使用;有利于使您的代码可移植。