Matlab 调用文件夹内的excel文件
当利用Matlab做数据分析的时候,经常会出现想调用N个excel文件里的信息,这个时候就可以利用 [csvread] 一次性读取多个excel里面的内容并全部保存到一个wrokwpace里面
*2019年之后的Matlab推荐使用 readmatrix,两者都行。
只想看结果可以直接跳转完整代码
思路
- 利用 [ls]
db=ls
读取文件夹内所有文件名的字符信息。
可以得到db的值如下:
- 再将db的值转换为字符串
并利用 deblank 将多余的空白给去除
db1=string(db);
db1=deblank(db1);
可以得到如下:
- 取出自己想要的excel文件名
(这里去掉了第一行第二行,和最后几行的其他文件名)
并利用 [length] 计算他们的行数,用来之后的for循环
data=db1([3:50],1);
l = length(data);
- 利用for遍历所有想要读取的文件,并把文件名去读出来
(因为原始数据第20行开始才是数据,之前都是文字文本,所以这里从20行开始读取)
name=['a=csvread(''',data(i,1),''',20,1);'];
可以获得如下效果
并利用 strcat 将文字列合并可以获得如下效果:
-
通过 eval 运行上述的a命令,并保存到我想要的工作间里,
第一列为(分离了后缀之后的)文件名,第二列为内嵌数据。
如下图:
通过这个数据库,想要读取任意excel里的文件时只需要调用slipdata1里面的内嵌数据就可以了。 -
最后保存这个想要的workspace,把不想要的都删除。
完整代码
clear
db=ls;
db1=string(db);
db1=deblank(db1);
data=db1([3:50],1);
l=length(data); %计算文件数
for i=1:l
test_data(i,1)={data(i,1)};
name=['a=csvread(''',data(i,1),''',20,1);'];%从20行开始读取
name1=strcat(name(1,1),name(1,2),name(1,3)); %文字列合并
eval(name1); %运行csvread
slipdata=strsplit(test_data{i,1},'.'); %分离.csv字符
slipdata1(i,1)={slipdata(1,1)};
slipdata1(i,2)={a};
clear a;
end
%clearvars -except slipdata1 %只保留想要的数据
%save('slipdata1')
小结
- 简单读取csv文件的方法还有很多,这里给出了想要大量读取文件夹内csv文件并保存到一个数据库里的操作。
- 如果有更好的做法希望能告诉我,这里也只是个人尝试。
- csvread 已经是Matlab不推荐的用法了,Matlab推荐使用readmatrix。笔者习惯了使用csvread,这里也没有发现有什么问题。欢迎补充readmatrix的用发。
参考
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。