虽然需要打开文件夹,但是最终终归是需要读取其中数据的
顺便补充一下上一篇的缺漏,打开文件夹还有个命令是
cd '';
cd ([]);
上面的是直接给出路径的方法,下面的是给出拼接的字符串路径的方法
关于读取数据,这次的项目主要涉及到的读取的文件格式是:mat,excel,csv和txt
Matlab读取.mat文件
这个没啥好说的,老朋友,老生常谈
load('');
load([]);
同样还是涉及到路径是否拼接的问题
Matlab读取.xls或者.xlsx文件或者.csv文件
这个我选了一个比较巧的方式就是
data_set = importdata(file_name);
选用importdata而不是xlsread,主要是每次用xlsread不知道咋地老是容易出错,这三个都一样的 ,都用这个命令就行,然后标题和表头都用字符串存起来了,可以进行另外的读取。
Matlab读取文件夹下文件,进行后缀转写
Matlab读取文件夹下.txt文件
Matlab读取文件夹下文件并复制内容
这三个在一个函数里面实现的,不知道怎么分类比较方便,首先要读取所有文件名,然后拼接文件名和后缀,再然后进行文件内容的复制和粘贴
Files= dir(strcat(keda_path));
new_kedapath =[ keda_path,'\' ,'change\']; % new_folder 保存要创建的文件夹,是绝对路径+文件夹名称
mkdir(new_kedapath); % mkdir()函数创建文件夹
a = cell(length(Files)-1 ,1);
a_char = cell(length(Files)-1 ,1);
k = 0;
for i=1:length(Files)
if(isequal(Files(i).name,'.')||isequal(Files(i).name,'..')||isequal(Files(i).name,'change'))% 去除系统自带的两个隐文件夹
continue;
end
k = k+1;
x1=Files(i).name;%取出文件的名称
%时间标识符号
time_label = Files(i).name(end-1:end);
x2='.txt';%转为字符串
x3=strcat(x1,x2);
copyfile([keda_path,'\', x1],[new_kedapath,'\',x3]); %复制到“处理好的数据”文件夹中
a_temp = [x1(end-2) x1(end-1) x1(end)];
a_char{k} = a_temp;
a{k} = str2num (a_temp);
%计算给出的时间点数量
a_num = a{1};
if a{k} == a_num && k>=2
biaoji_1 = k;
end
end
a_char(cellfun(@isempty,a_char))=[];
a(cellfun(@isempty,a))=[];
这个是新改写了一个文件夹,在原来的子文件夹下面设计了一个新的文件夹用于存放新复制的文件
copyfile([keda_path,'\', x1],[new_kedapath,'\',x3]); %复制到“处理好的数据”文件夹中
这一句是复制文件
kedaDataDir = dir(new_kedapath); % 遍历所有新生成文件
%找到四个地点的命名
for i = 3:biaoji_jiange:length(kedaDataDir)-biaoji_jiange
if(isequal(kedaDataDir(i).name,'.')||isequal(kedaDataDir(i).name,'..'))
continue;
end
str = kedaDataDir(i).name;
position_temp = regexp(str, '_', 'split');
position.name{ceil((i)/biaoji_jiange)} = position_temp{3}; %此处是根据命名文件法则进行的
end
cd(new_kedapath); %把当前工作目录切换到指定文件夹
keda_name = position.name;
j = 0;k = 1;
for i = 1:length(kedaDataDir)
if(isequal(kedaDataDir(i).name,'.')||isequal(kedaDataDir(i).name,'..'))
continue;
end
j = j+1;
%遍历所有文件找到每个地点对应的文件进行读取
if a{j} == 0&&j>1
k = k+1;
j = j-biaoji_jiange;
end
filename=kedaDataDir(i).name; %文件名
delimiterIn = ' '; %列分隔符
headerlinesIn = 2; %读取从第 headerlinesIn+1 行开始的数值数据
data_temp=importdata(filename,delimiterIn,headerlinesIn);
dataset=data_temp.data; %导出数据矩阵
parameters=data_temp.textdata; %导出元胞数组
keda.data{j,k} = dataset; %数据存储
%保存对应地理位置
keda.position{k} = data_temp.textdata(1);
end
keda.datalabel = data_temp.colheaders;
因为文件的位置换了需要去新文件夹下面读取
这个还有一个特殊操作是,因为这个是txt文件,文件的分隔符依靠的是自己设置的,就会多出来一丢丢代码这个样子
Matlab 正则化
这里面有个特殊的操作是,正则化读取文件名中的某些部分
position_temp = regexp(str, '_', 'split');
Matlab对字符串的处理比较弱感觉,还有个经常用到的函数是字符串比较的
strcmp(,)
这个函数