Matlab读取多个文件夹下的同名csv文件
filename = 'D:\Due\Jump\2014?\600005.csv';
delimiter = ',';
formatSpec = '%*s%f%*s%*s%[^\n\r]';
fileID = fopen(filename,'r');
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'ReturnOnError', false);
fclose(fileID);
2014?600005 = dataArray{:, 1};
% Clear temporary variables
clearvars filename delimiter formatSpec fileID dataArray ans;
end
其中?表示文件夹名是201401-201412,希望读取之后保存成相应格式的mat文件,真心求助。
非常感谢您的帮助,还有几个问题
1.其实有两次循环,也就是文件路径是2014 》201401(一直到201412这样12个文件夹) 》20140102(这个月的工作日,大概20天),所以有两次循环,不知道是不是一样的道理?但是第二次循环已经不规则了。
2. 用csvread总是会出问题,请问csv这个能用xlaread吗?
3. 读取的多个文件后的数组的变量名能一样吗?还是要每个都不一样,当然,mat文件名需要按照顺序命名,也就是按日期+600005这样,这个怎么写?
4.需要把mat文件保存在当前m文件所在文件夹,如何实现? 展开
涉及到以下三个问题:
1、用循环对多个文件夹中的文件进行操作。这其实就是生成一个路径名的问题,可用类似下面的代码来做:
for i=1:12
filename = ['D:\Due\Jump\2014' sprintf('%02i',i) '\600005.csv'];
...
end
2、读csv文件。题主现在读csv文件应该没问题吧?如果用textscan遇到问题,不妨试试xlsread。
3、保存成mat文件。这个更简单,用save函数即可,不过,还有两个细节需要明确:
(1)mat文件保存在什么位置?当前文件夹,还是和原csv文件相同?
(2)保存到mat文件中的变量名?mat文件不仅保存数据的内容本身,还包括变量的名称。
补充了问题,非常感谢!
就你补充的问题谈点建议,供参考:
1、关于双重循环的第二重循环不规则的问题,可以考虑以下两种方法:
(1)用dir函数获取一个文件夹里面的文件和子文件夹,然后对其结果进行循环,判断结构体的isdir域为真则进行处理(注意排除两个特殊的文件夹,即.和..)。这种方法适用于没有其它无关文件夹的情况。
(2)用循环j=1:31,对每个j用exist函数判断是否存在相应的文件夹,有则处理,无则跳过。
2、xlsread函数可用于读csv文件,而且对一些复杂的csv文件来说,效果应该比textscan要好。
3、变量名可以一样。
mat文件名需要按照顺序命名,在循环体内直接生成字符串即可,例如:
fname = sprintf('2014%02i%02i+600005.mat',i,j);
4、要把mat文件保存在当前m文件所在文件夹,这要考虑两种情况:
(1)如果MATLAB的当前目录即为m文件所在文件夹,直接save(fname,varname)即可。
(2)如果m文件是通过添加path方式执行,其所在文件夹未必是当前路径,这种情况就稍微复杂一下,需要用mfilename和which配合来获取m文件所在的位置,然后把该路径附加到文件名前面。
由于没有测试条件,只能根据自己的经验大致提这么一些建议。如果还有问题再追问吧,或者把部分文件(含目录结构)打包传到网盘,我再帮你写代码。