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


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

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

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

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

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

    FilePath = uigetdir

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

    [Filename,FilePath]=uigetfile

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

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

    1. clear;clc;close;
    2. Path = 'C:\Users\Kaero\Documents'; % 设置数据存放的文件夹路径
    3. % Path = uigetdir; % 获取文件夹路径
    4. % [~,Path]=uigetfile; % 获取文件所在文件夹的路劲
    5. File = dir(fullfile(Path,'*.CSV')); % 获取文件夹下所有符合后缀名为.csv文件(后缀名可以根据自己情况进行修改)的完整信息
    6. FileNames = {File.name}'; % 提取所有文件的文件名,转换为n行1列
    7. Number_Files = size(FileNames,1); % 获取所提取数据文件的个数
    8. %数据处理
    9. for i = 1 : Number_Files
    10. filename = [Path, '\', char(File(i).name)]; % 根据时间顺序连接路径和文件名得到完整的文件路径
    11. data = readmatrix(filename); % 读取文件中的数据,CSV文件是如此,其他诸如txt,xlsx文件可能会有所不同,我还没验证过
    12. %% 根据读取的数据进行处理,这部分根据想要的效果自由发挥
    13. %%
    14. end

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

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

    1. clear;clc;close;
    2. Path = 'C:\Users\Kaero\Documents'; % 设置数据存放的文件夹路径
    3. % Path = uigetdir; % 获取文件夹路径
    4. % [~,Path]=uigetfile; % 获取文件所在文件夹的路劲
    5. File = dir(fullfile(Path,'*.CSV')); % 获取文件夹下所有符合后缀名为.csv文件(后缀名可以根据自己情况进行修改)的完整信息
    6. FileDates = [File.datenum]'; % 提取文件的时间信息
    7. [~, sortedIndex] = sort(FileDates); % 根据时间信息排序文件索引
    8. Number_Files = size(FileDates,1); % 获取所提取数据文件的个数
    9. %数据处理
    10. for i = 1 : Number_Files
    11. filename = [Path, '\', char(File(sortedIndex(i)).name)]; % 根据时间顺序连接路径和文件名得到完整的文件路径
    12. data = readmatrix(filename); % 读取文件中的数据,CSV文件是如此,其他诸如txt,xlsx文件可能会有所不同,我还没验证过
    13. %% 根据读取的数据进行处理,这部分根据想要的效果自由发挥
    14. %%
    15. end

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

    演示视频

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

     

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

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

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

    1. clear; clc; close all
    2. %% 文件读取
    3. % 设置数据存放的文件夹路径
    4. Path = 'C:\Users\Kaero\Desktop\演示用文件';
    5. % 获取文件夹路径
    6. % Path = uigetdir;
    7. % 获取文件所在文件夹的路劲
    8. % [~,Path]=uigetfile;
    9. File = dir(fullfile(Path,'*.xlsx')); % 显示文件夹下所有符合后缀名为.csv文件(后缀名可以根据自己情况进行修改)的完整信息
    10. FileDates = [File.datenum]'; % 提取文件的时间信息
    11. [~, sortedIndex] = sort(FileDates); % 根据时间信息排序文件索引
    12. Number_Files = size(FileDates,1); % 获取所提取数据文件的个数
    13. Wpeak = zeros(1,Number_Files); % 要获取的峰值数量
    14. %% 数据处理
    15. for i = 1 : Number_Files
    16. % 根据时间顺序连接路径和文件名得到完整的文件路径
    17. filename = [Path, '\', char(File(sortedIndex(i)).name)];
    18. % 读取文件中的数据
    19. data = readmatrix(filename);
    20. %平滑
    21. % data(:,2) = smooth(data(:,2),5);
    22. % 寻找峰值
    23. [Wmax,location] = findpeaks(data( : ,2));
    24. % 记录峰值
    25. Wpeak(1,i) = Wmax;
    26. % 绘图
    27. figure(1)
    28. plot(data( : , 1),data( : , 2));
    29. grid off;hold on;
    30. % 标志波峰
    31. scatter(location, Wpeak(1 ,i), 'g*');hold on;
    32. % 标志文件对应的数字
    33. text(location, Wpeak(1,i), num2str(i), 'Color', 'r', 'VerticalAlignment', 'bottom', 'HorizontalAlignment', 'left');
    34. end

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

  • 相关阅读:
    linux之curl命令
    【Linux】多线程
    SpringBoot+Mybaits搭建通用管理系统实例五:登录健权框架实现上
    “蔚来杯“2022牛客暑期多校训练营5 E题: Fraction Game
    Spring-populateBean属性填充
    【三维重建】相移法+格雷码
    【GIS】地理坐标系WGS84、GCJ-02、BD-09、GCS2000
    洛谷刷题C语言:ZAMKA、Number、子弦、NOI、Emacs
    【3dmax】怎么使面变透明
    C++参数带大括号 func({})
  • 原文地址:https://blog.csdn.net/weixin_53447776/article/details/133853768