又是一个新的小项目的整理(本文主要是Matlab 数据读取)

虽然需要打开文件夹,但是最终终归是需要读取其中数据的

顺便补充一下上一篇的缺漏,打开文件夹还有个命令是

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(,)

这个函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值