MATLAB-自动批量读取文件,并按文件名称或时间顺序进行数据处理

我在处理文件数据时,发现一个一个文件处理效率太低,因此学习了下MATLAB中自动读取特定路径下文件信息的程序,并根据读取信息使用循环进行数据处理,提高效率,在此分享给大家这段代码并给予一些说明,希望能为大家的数据处理起到一定的帮助。

首先咱们先认识认识以下常用代码:

FilePath = 'C:\Users\Kaero\Documents';   % 自己设置数据存放的文件夹路径
FilePath = uigetdir; % 获取文件夹路径
[Filename,FilePath]=uigetfile; % 获取单个文件的文件名及其路径

FilePath = 'C:\Users\Kaero\Documents\可修改,带有中文也行'

路径可以修改到自己想进行数据的文件夹,文件夹路径可以在资源管理器快速获取,如下图所示,方便又快捷

FilePath = uigetdir

运行此代码则会打开一个窗口,等待你选择任一文件夹,选择完后获得此文件夹的路径

[Filename,FilePath]=uigetfile

则是打开一个窗口获得选择的文件的文件名以及路径,与uigetdir类似

按照文件名顺序进行数据处理的详细代码如下。这个是批量读取.csv格式的文件,如果想改成其他格式,则需要在代码中修改对应的后缀名;如果想将处理顺序反过来可以用flipud函数或从大往小进行循环

​
clear;clc;close;

Path = 'C:\Users\Kaero\Documents';   % 设置数据存放的文件夹路径

% Path = uigetdir; % 获取文件夹路径
% [~,Path]=uigetfile; % 获取文件所在文件夹的路劲

File = dir(fullfile(Path,'*.CSV'));  % 获取文件夹下所有符合后缀名为.csv文件(后缀名可以根据自己情况进行修改)的完整信息

FileNames = {File.name}'; % 提取所有文件的文件名,转换为n行1列

Number_Files = size(FileNames,1);    % 获取所提取数据文件的个数

%数据处理
for i = 1 : Number_Files

    filename = [Path, '\', char(File(i).name)]; % 根据时间顺序连接路径和文件名得到完整的文件路径

    data = readmatrix(filename); % 读取文件中的数据,CSV文件是如此,其他诸如txt,xlsx文件可能会有所不同,我还没验证过
    
    %% 根据读取的数据进行处理,这部分根据想要的效果自由发挥



    %%

end

​

 i 的每一次循环是处理一个文件,如果不同文件的数据处理方法差异过大,是不能单独使用循环的,还得结合其他方法!!!

按照文件保存时间顺序进行数据处理的详细代码如下

​
clear;clc;close;

Path = 'C:\Users\Kaero\Documents';   % 设置数据存放的文件夹路径

% Path = uigetdir; % 获取文件夹路径
% [~,Path]=uigetfile; % 获取文件所在文件夹的路劲

File = dir(fullfile(Path,'*.CSV'));  % 获取文件夹下所有符合后缀名为.csv文件(后缀名可以根据自己情况进行修改)的完整信息

FileDates = [File.datenum]';  % 提取文件的时间信息

[~, sortedIndex] = sort(FileDates);  % 根据时间信息排序文件索引

Number_Files = size(FileDates,1);    % 获取所提取数据文件的个数

%数据处理
for i = 1 : Number_Files

    filename = [Path, '\', char(File(sortedIndex(i)).name)]; % 根据时间顺序连接路径和文件名得到完整的文件路径

    data = readmatrix(filename); % 读取文件中的数据,CSV文件是如此,其他诸如txt,xlsx文件可能会有所不同,我还没验证过
    
    %% 根据读取的数据进行处理,这部分根据想要的效果自由发挥



    %%

end

​

 最终可得到的效果如视频所示

演示视频

CSDN视频压缩极为严重,想要清晰且更详细的演示视频请跳转至:B站演示视频

 

使用模拟-寻找几段数据的波峰

假设目前有一些待处理的.xlsx数据文件,使用上述代码获取其峰值信息

代码如下所示,仅实现了最基础的寻峰功能,实际效果请看演示视频或自行尝试

clear; clc; close all

%% 文件读取

% 设置数据存放的文件夹路径
Path = 'C:\Users\Kaero\Desktop\演示用文件';   

% 获取文件夹路径
% Path = uigetdir; 

% 获取文件所在文件夹的路劲
% [~,Path]=uigetfile; 

File = dir(fullfile(Path,'*.xlsx'));  % 显示文件夹下所有符合后缀名为.csv文件(后缀名可以根据自己情况进行修改)的完整信息

FileDates = [File.datenum]';  % 提取文件的时间信息

[~, sortedIndex] = sort(FileDates);  % 根据时间信息排序文件索引

Number_Files = size(FileDates,1);    % 获取所提取数据文件的个数

Wpeak = zeros(1,Number_Files);  % 要获取的峰值数量


%% 数据处理

for i = 1 : Number_Files

    % 根据时间顺序连接路径和文件名得到完整的文件路径
    filename = [Path, '\', char(File(sortedIndex(i)).name)]; 

    % 读取文件中的数据
    data = readmatrix(filename); 

     %平滑
    % data(:,2) = smooth(data(:,2),5);
   
    % 寻找峰值
    [Wmax,location] = findpeaks(data( : ,2)); 

    % 记录峰值
    Wpeak(1,i) = Wmax;

    % 绘图
    figure(1)
    plot(data( : , 1),data( : , 2));
    grid off;hold on;

    % 标志波峰
    scatter(location, Wpeak(1 ,i), 'g*');hold on; 

    % 标志文件对应的数字
    text(location, Wpeak(1,i), num2str(i), 'Color', 'r', 'VerticalAlignment', 'bottom', 'HorizontalAlignment', 'left');
end

如果觉得这片文章对你有用的话,能否点个赞再走呢? 

### MATLAB 中按照指定顺序读取多个文件将数据整合到一个表格中的方法 在MATLAB中,可以通过编写脚本来实现按特定顺序读取多个文件将这些文件的内容整合到单个表格中。下面是一个详细的指南来完成这一操作。 #### 准备工作 确保所有待读取文件位于同一目录下,且具有相似的结构以便于后续处理。如果文件名遵循某种规律,则可利用此特性简化批量加载过程。 #### 创建文件列表 首先创建一个包含目标文件路径的字符串数组元胞数组: ```matlab % 定义要读取文件夹路径 folderPath = 'C:\path\to\your\files'; % 获取该文件夹内所有CSV文件的名字 filePattern = fullfile(folderPath, '*.csv'); allFiles = dir(filePattern); % 提取出完整的文件路径形成cell array fullFileNames = {allFiles.fullname}; ``` #### 排序文件列表 为了保证读入的数据是有序排列,在实际应用前应该先对`fullFileNames`进行适当排序。假设文件命名方式能够反映其应有的先后次序(例如日期时间戳),那么可以直接调用sort函数对其进行升序/降序调整;否则可能需要自定义比较逻辑来进行更复杂的排序[^1]。 ```matlab % 对文件名称做自然数大小写敏感排序 sortedFullFileNames = sort(fullFileNames); ``` #### 循环读取文件追加至总表 初始化一个空table用于存储最终结果,接着遍历已排好序后的文件列表逐个解析内容向其中累加新记录: ```matlab % 初始化一个空Table作为累积容器 combinedData = []; for k = 1:length(sortedFullFileNames) % 当前正在处理的文件全路径 currentFileName = sortedFullFileNames{k}; % 使用readtable读取当前CSV文件转换成Table形式 tempDataTable = readtable(currentFileName); % 如果这是第一次迭代则直接复制给CombinedData, % 否则通过vertcat垂直拼接新增行向量. if isempty(combinedData) combinedData = tempDataTable; else combinedData = vertcat(combinedData, tempDataTable); end end ``` 上述代码片段展示了如何循环访问一系列CSV文件依次将其内容附加到名为`combinedData`的大表里去。值得注意的是,这里采用了`readtable()`而非原始材料提到过的Python库pandas里的`read_csv()`,因为前者专为MATLAB设计更适合本场景需求。 #### 处理潜在问题 当遇到不同列数量者类型差异较大的情况时,建议提前审查各个源文件的一致性,必要情况下手动修正后再执行自动化流程。另外考虑到内存占用因素,对于特别庞大的数据集应当考虑分批次载入而不是一次性全部加载完毕。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值