ceacer 2 已发布 1月29号 分享 已发布 1月29号 当我们加载数据要进行处理的时候,可能会要批量处理同类型数据文件。如果数据文件名不具有规律性的话,不方便设置规律加载,此时我们可以编程实现自动加载文件夹下的同类型所有文件,例如批量加载指定路径的文件夹下的所有xxx.txt、xxx.xlsx、xxx.jpg、xxx.png等等文件。 实例1 加载xxx.txt文件 E:matlabbinwork研究生微信公众号20220425的文件夹下有三个txt数据文件。文件名没有什么规律,里面随便写了数据。主要通过程序实现自动加载文件并进行处理和输出结果。 clc;clear all;close all;%一次性读取文件path ='E:matlabbinwork研究生微信公众号20220425';%自行确定文件路径data_list=dir(strcat(path,'*.txt'));%识别数据文件(txt)信息%注:如果是excel文件的话,上述的*.txt需要改为xlsx,%文件的路径可以直接粘贴复制得到,但要注意matlab的语法格式,如“”和‘’的区别:%确定文件数目;k = length(data_list);for j=1:k%(自行确定文件总数目) data_name = data_list(j).name;%获取数据文件命名 a{j,1}=importdata(data_name); %读取数据 %元胞数组是一种包含名为元胞的索引数据容器的数据类型 %其中的每个元胞都可以包含任意类型的数据。 %元胞数组通常包含文本列表、文本和数字的组合或者不同大小的数值数组。 %通过将索引括在圆括号 () 中可以引用元胞集。使用花括号 {} 进行索引来访问元胞的内容。enda{1,1}a{2,1}a{3,1}figure;plot(a{1,1}(1,:),a{1,1}(2,:),'r-');xlabel('x');figure;plot3(a{2,1}(1,:),a{2,1}(2,:),a{2,1}(3,:),'b-');xlabel('x');ylabel('y');zlabel('z');%输出for i = 1:k xlswrite(strcat("数据",strcat(num2str(i),".xlsx")),a{i,1});end运行结果 同时生成了数据文件数据1.xlsx 、数据2.xlsx和数据3.xlsx 实例2 加载xxx.xlsx文件 利用上个实例生成的三个excel数据文件,编程实现批量加载文件夹里面的指定类型文件。 clc;clear all;close all;%一次性读取文件file_path ='E:matlabbinwork研究生微信公众号20220425';%自行确定文件路径data_list=dir(strcat(file_path,'*.xlsx'));%识别数据文件(txt)信息%注:如果是excel文件的话,上述的*.txt需要改为xlsx,%文件的路径可以直接粘贴复制得到,但要注意matlab的语法格式,如“”和‘’的区别:%确定文件数目;k = length(data_list);for j=1:k%(自行确定文件总数目) data_name = data_list(j).name;%获取数据文件命名 a{j,1}=xlsread(data_name); %读取数据 %元胞数组是一种包含名为元胞的索引数据容器的数据类型 %其中的每个元胞都可以包含任意类型的数据。 %元胞数组通常包含文本列表、文本和数字的组合或者不同大小的数值数组。 %通过将索引括在圆括号 () 中可以引用元胞集。使用花括号 {} 进行索引来访问元胞的内容。enda{1,1}a{2,1}a{3,1}%输出for i = 1:k xlswrite(strcat("输出数据",strcat(num2str(i),".xlsx")),a{i,1});end运行结果 生成三个输出数据1,2,3的excel文件 3.涉及的函数知识 3.1 strcat函数 水平串联字符串 语法 s=strcat(s1,...,sN) 说明 s=strcat(s1,...,sN) 水平串联其输入参数中的文本。每个输入参数都可以是字符数组、字符向量元胞数组或字符串数组。 如果任一输入是字符串数组,则结果是字符串数组。 如果任一输入是元胞数组,并且没有输入是字符串数组,则结果是字符向量元胞数组。 如果所有输入都是字符数组,则结果是字符数组。 对于字符数组输入,strcat 会删除尾部的 ASCII 空白字符:空格、制表符、垂直制表符、换行符、回车和换页符。对于元胞数组和字符串数组输入,strcat 不删除尾部空白。 %创建两个字符向量。使用 strcat 水平串联两个向量。 s1 = 'Good'; s2 = 'morning'; s = strcat(s1,s2) s = 'Goodmorning' %创建两个字符向量元胞数组。使用 strcat 水平串联两个元胞数组的元素 s1 = {'abcde','fghi'}; s2 = {'jkl','mn'}; s = strcat(s1,s2) s = 1x2 cell {'abcdejkl'} {'fghimn'} %串联两个字符串数组 str1 = ["John ","Mary "]; str2 = ["Smith","Jones"]; str = strcat(str1,str2) 3.2 dir函数 列出文件夹内容 语法 dir dir name listing=dir(name) 说明 dir 列出当前文件夹中的文件和文件夹。 dir name 列出与 name 匹配的文件和文件夹。如果 name 为文件夹,dir 列出该文件夹的内容。 使用绝对或相对路径名称指定 name。name 参数的文件名可以包含 * 通配符,路径名称可以包含 * 和 ** 通配符。与 ** 通配符相邻的字符必须为文件分隔符。 listing = dir(name) 返回 name 的属性。 %列出文件夹的内容。 %创建文件夹 myfolder,其中包含文件 myfile1.m、myfile2.m 和 myfile3.m。 mkdir myfolder movefile myfile1.m myfolder movefile myfile2.m myfolder movefile myfile3.txt myfolder %列出 myfolder 中符合条件的文件。 cd myfolder dir *my*.m %列出当前文件夹中和当前文件夹的所有子文件夹中的所有文件。 %创建文件夹 myfolder1,其中包含以下文件和文件夹: mkdir myfolder1 mkdir myfolder1/myfolder2 mkdir myfolder1/myfolder2/myfolder3 movefile myfile1.m myfolder1 movefile myfile2.m myfolder1/myfolder2 movefile myfile3.m myfolder1/myfolder2/myfolder3 %列出 myfolder1 中和 myfolder1 的子文件夹中扩展名为 .m 的所有文件。 cd myfolder1 dir **/*.m Files Found in Current Folder: myfile1.m Files Found in: myfolder2 myfile2.m Files Found in: myfolder2/myfolder3 myfile3.m %在返回结构体中查找信息 %将 myfolder 的文件夹列表返回给变量 MyFolderInfo。 %创建文件夹 myfolder,其中包含文件 myfile1.m、myfile2.m 和 myfile3.m。 mkdir myfolder movefile myfile1.m myfolder movefile myfile2.m myfolder movefile myfile3.m myfolder %获取 myfolder 中文件的列表。MATLAB 以结构体数组形式返回信息。 MyFolderInfo = dir('myfolder') MyFolderInfo = 5x1 struct array with fields: name folder date bytes isdir datenum 创建结构体索引以访问特定项目。 MyFolderInfo(3).name 要搜索多个文件,请在文件名中使用通配符。例如,dir *.txt 将列出当前文件夹中扩展名为 txt 的所有文件。要以递归方式搜索路径上的文件夹和子文件夹,请在路径名称中使用通配符。例如,dir */*.txt 列出正好是当前文件夹的下一级文件夹中扩展名为 txt 的所有文件,dir **/*.txt 列出当前文件夹下或其下多个文件夹中扩展名为 txt 的所有文件。与 ** 通配符相邻的字符必须为文件分隔符。 输出参数 字段名称 说明 类 name 文件或文件夹名称 char folder 文件或文件夹的位置 char date 修改日期时间戳 char bytes 文件大小(以字节为单位) double isdir 如果名称为文件夹,则为 1;如果名称为文件,则为 0 logical datenum 修改日期是一个日期序列值。 double 本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。 评论链接 在其他网站上分享 更多分享选项...
推荐帖
创建账户或登录以发表评论
您需要成为会员才能发表评论
创建一个帐户
在我们的社区注册一个新账户。很简单!
注册新账户登入
已有账户?在此登录
立即登录