通过MATLAB调⽤⼤量csv⾥的数据
Matlab 调⽤⽂件夹内的excel⽂件
当利⽤Matlab做数据分析的时候,经常会出现想调⽤N个excel⽂件⾥的信息,这个时候就可以利⽤ [csvread] ⼀次性读取多个excel⾥⾯的内容并全部保存到⼀个wrokwpace⾥⾯
*2019年之后的Matlab推荐使⽤ readmatrix,两者都⾏。
只想看结果可以直接跳转完整代码
思路
1. 利⽤ [ls]
db=ls
读取⽂件夹内所有⽂件名的字符信息。
可以得到db的值如下:
2. 再将db的值转换为字符串
并利⽤ deblank 将多余的空⽩给去除
db1=string(db);
db1=deblank(db1);
可以得到如下:
3. 取出⾃⼰想要的excel⽂件名
(这⾥去掉了第⼀⾏第⼆⾏,和最后⼏⾏的其他⽂件名)
并利⽤ [length] 计算他们的⾏数,⽤来之后的for循环
data=db1([3:50],1);
l = length(data);
4. 利⽤for遍历所有想要读取的⽂件,并把⽂件名去读出来
(因为原始数据第20⾏开始才是数据,之前都是⽂字⽂本,所以这⾥从20⾏开始读取)name=['a=csvread(''',data(i,1),''',20,1);'];
可以获得如下效果
并利⽤ strcat 将⽂字列合并可以获得如下效果:
5. 通过 eval 运⾏上述的a命令,并保存到我想要的⼯作间⾥,
第⼀列为(分离了后缀之后的)⽂件名,第⼆列为内嵌数据。
如下图:
通过这个数据库,想要读取任意excel⾥的⽂件时只需要调⽤slipdata1⾥⾯的内嵌数据就可以了。
6. 最后保存这个想要的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 %只保留想要的数据eval是做什么的
%save('slipdata1')
⼩结
简单读取csv⽂件的⽅法还有很多,这⾥给出了想要⼤量读取⽂件夹内csv⽂件并保存到⼀个数据库⾥的操作。
如果有更好的做法希望能告诉我,这⾥也只是个⼈尝试。
csvread 已经是Matlab不推荐的⽤法了,Matlab推荐使⽤readmatrix。笔者习惯了使⽤csvread,这⾥也没有发现有什么问题。欢迎补充readmatrix的⽤发。
参考
本作品采⽤进⾏许可。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论