MATLAB进行数据分析及处理,常常会需要访问各种文件,以及批量处理。下面总结一下常用的数据处理函数及方式。
1,读取当前文件夹下所有csv文件,并将每个文件中的特定数据组成一个矩阵,并组合。
file=dir('KH\*.csv');
%读取KH文件夹下全部csv文档
[~, ind] = sort([file(:).datenum], 'ascend');
%读物的文件按照时间顺序排列
filenew = file(ind);
%更新文件夹顺序
filename={filenew.name}';
Fold = {filenew.folder}';
fileall = strcat(Fold,'\',filename);
%将文件路径组合
将文件夹中的每个cvs文件取出特定数据,组成矩阵
Num = length(fileall);
for i = 1:Num
fid = fopen(fileall{i});
cellc = textscan(fid,'%f %f %f %f %s %f %s %f %f %f %f %f %f %f %s %*[^\n]','HeaderLines',6,'Delimiter',',');
%采用textscan的方式读取每个csv文件的内容。
fclose(fid);
dataall = cell2mat(cellc(1,8:14));%获取有用的数据
end
2,批量将某一文件夹下mat文件重新命名并放置在特定文件夹下。此目的可以分为两个步骤:a,对mat文件批量命名,一般采样eval函数(matlab中尽量避免此函数,不方便调试效率也较低)。b,批量保存文件。
DOCman = "newdata";
saldir = 'F:\data_source\';
Newdir = mkdir(saldir,DOCman); %根据需求创建文件夹
Num = length(data);
for i = 1:Num
var_data = ['data_',num2str(i)];
savePath =strcat(saldir,DOCman,'\','data_',num2str(i), '.mat');%确定保存路径及保存文件方式
eval(['data_',num2str(i),'=','data',';']); %用eval批量命名
save(savePath,var_data);
end
3,批量读取文件夹下所有文件,并将文件按顺序排序,windows系统下可以自动按照1,2,3...10,11...顺序排序文件 ,matlab批量读取的时候并不一定按照这种方式,所以需要自己处理,matlab自带sort函数可以进行排序,但是效果不佳。可以编辑下列m文件。
function [X,ndx,dbg] = natsort(X,rgx,varargin)
% Alphanumeric / Natural-Order sort the strings in a cell array of strings (1xN char).
%
% (c) 2012-2019 Stephen Cobeldick
%
% Alphanumeric sort a cell array of strings: sorts by character order and
% also by the values of any number substrings. Default: match all integer
% number substrings and perform a case-insensitive ascending sort.
%
%%% Example:
% >> X = {'x2', 'x10', 'x1'};
% >> sort(X)
% ans = 'x1' 'x10' 'x2'
% >> natsort(X)
% ans = 'x1' 'x2' 'x10'
%
%%% Syntax:
% Y = natsort(X)
% Y = natsort(X,rgx)
% Y = natsort(X,rgx,<options>)
% [Y,ndx,dbg] = natsort(X,...)
%
% To sort filenames or filepaths use NATSORTFILES (FEX 47434).
% To sort the rows of a cell array of strings use NATSORTROWS (FEX 47433).
%
%% Number Substrings %%
%
% By default consecutive digit characters are interpreted as an integer.
% Specifying the optional regular expression pattern allows the numbers to
% include a +/- sign, decimal digits, exponent E-notation, quantifiers,
% or look-around matching. For information on defining regular expressions:
% http://www.mathworks.com/help/matlab/matlab_prog/regular-expressions.html
%
% The number substrings are parsed by SSCANF into numeric values, using
% either the *default format '%f' or the user-supplied format specifier.
%
% This table shows examples of regular expression patterns for some common
% notations and ways of writing numbers, with suitable SSCANF formats:
%
% Regular | Number Substring | Number Substring | SSCANF
% Expression: | Match Examples: | Match Description: | Format Specifier:
% =====