Matlab如何循环读取文件
循环读取图片第一种方法①List =dir('*.jpg');
%如需其它图片格式支持,可以自己【重载dir()】函数,实现查找所有图片文件的功能,
%如果图片是其它路径,可以用 ["路径" ".扩展名"] 字符串来实现。
k =length(dList);
for i=1:1:k
image_data{i}=imread(dList(i).name);
end
第二种方法②I=ones(8,5);
q=reshape(49:56,8,1);
I(:,1)=q;
I(:,2)='.';
I(:,3)='b';
I(:,4)='m';
I(:,5)='p';
L=setstr(I); %将ASCII码转为字符串;
第三种方法③
images= [ ];
for i= 1:M
str= strcat ('D: \MATLAB\work\', int2str(i) , ’.bmp’) ; % 连接字符串形成图像的文件名。
img= imread(str);
[rows cols]= size(img) ; % 获得图像的行和列值。
temp= reshape ( img, rows*cols, 1) ; % 创建一个(N1*N2)×1 矩阵。
images= [ images temp ]; % 完成循环后的images 矩阵是一个(N 13 N 2) ×M 矩阵。
end
上述三种方法中,第一种主要利用dir()函数,获得文件夹内图片的信息,然后创建一个元胞数组,将图片文件信息送入元胞数组
第二种方法是已知图片文件名,并且按数字顺序排列,然后利用数字和字符串之间的转换来进行。
第三种方法利用字符串连接函数strcat()函数巧妙运用循环实现图片的连续读入。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
文件名规律(比如qnl260.200,qnl260.201,qnl260.202~~qnl260.300)的多个二进制文件进行同样的处理,
问题是怎么循环的读入这些文件,就是想编个程序让它读取第一个数据处理,然后读取第二个数据处理,以此类推
file=dir('*.txt');
data=cell(1,size(file,1));
for i=1:size(file,1);
data{1,i}=read(file(i).name);
end
获取路径的文件索引后读入
具体的read模式可以参见help
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
现在假定有一个数据文件叫data.dat,它的前面2k是存放参数的,我们做数据处理的时候需要跳过去,后面的数据是16位整数类型的,每组数据有512个。现在要把该数据文
件的所有数据读入一个nx512的矩阵中,n的个数不定,根据数据文件中的数据而定。
用.m脚本的方式编写如下:
% deal data from specified data file
clear ;
data_fname = 'data.dat' ; % 这里是文件名
jump_distance = 2048 ; % 这里是跳过的字节数
% 打开方式为二进制打开,其实'r'就行,matlab是默认二进制形式打开文件的
file_id = fopen(data_fname, 'rb');
% 从文件开始跳过jump_distance个字节
fseek(file_id, jump_distance, 'bof');
% 先手工构造一个1x512大小的矩阵
raw_data = [1:1:512] ;
while feof(file_id) == 0
% 这就是大名顶顶的fread了,数据类型是int16,每次读入512个数
% raw_array每次都是512x1的矩阵,ele_count为读入的数的个数(正常情况下应为512)
[row_array, ele_count] = fread(file_id, 512, 'int16') ;
if ele_count < 512 % elecount < 512代表数据不够,已经到了文件的结尾
break ;
else
% 将512x1的row_array转置一下,变为1x512的矩阵
row_array = row_array' ;
% 然后,将row_array追加到raw_data中
raw_data = [raw_data; row_array] ;
end
end
% get off the first line [1:1:512]
% 这里就是要把raw_data的第一行数据手工构造的那行数据给去掉,剩下的就都是文件中的数据了
raw_data(1,:)=[] ;
% 关闭文件
fclose(file_id);
% delete other usless vars
% 这里是把用过的变量都删除掉,免得workspace里面乱七八糟的什么都有,这是个好习惯,呵呵。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
matlab中读取某个文件夹下所有数据文件
怎么用matlab读取多个数据文件?
1:如果文件名规则
% 文件目录:
my_dir=' /home/my_calculation1/test1/';
%文件名前缀
my_pre_T='test';%文件数目fnum =1:32; %Read filesfor i=1:length(fnum) filename = [my_dir,prefix_T1 num2str(fnum(i))]; 然后dlmread,fopen等操作就不需详写
了!与单个文件一样。
end
2:文件夹数据批量读取的问题,命名无规则
在windows下很简单,ls函数便可以得到一个包含所有文件名的字符矩阵。可惜在unix下得到的是个字符行向量。当然,处理下也可以批量读取数据文件,不过不想再写了。
因为另外一个函数也可以实现批量处理数据文件的功能。即dir函数
LS displays the results of the 'ls' command on UNIX.
On UNIX, LS returns acharacter row vectorof filenames separated by tab and space characters.
On Windows, LS returns anm-by-n character array of filenames, where m is the number of filenames and n is the number of characters in the longest
filename found. Filenames shorter than n characters are padded with space characters.
下面介绍下使用dir函数读取文件夹中文件的程序
2.1 读取所有扩展名为.dat的数据文件,并进行处理。
matlab中,也可以使用通配符的。下面就来展示下:
现在有一个文件夹里面有50个的.dat文件.每个文件大概三万行.两列,第一列是字符串,第二列是浮点数字.批量读取这个文件夹里的.dat文件的第二列。读取完以后的数组变
量名就是.dat的文件名
假定.dat文件在/home/my_calculation1/test1/ 文件夹下,文件名符合matlab变量名的命名规则,要读取第二列的浮点数字为数组并以文件名为变量名。
mydir='/home/my_calculation1/test1/';
temp1=dir([mydir,'*.dat']);
num_temp1=length(temp1);
for i1=1:num_temp1
filename=[mydir,temp1(i1).name];
temp=dlmread(filename,'',0,1);
eval([temp1(i1).name(1:end-4),'=temp;'])
dlmread,fopen等操作就不需详写了!与单个文件一样。end
注意:如果直接使用 temp1=dir(mydir]);读取文件夹下所有文件,应当从第三个开始才是目录下的文件。另外,使用dir还可以遍历一个文件夹下的所有子文件夹。 1、利用
dir(外层文件夹)获取子文件夹;
2、利用dir(子文件夹)获取子文件夹中的文件信息;
3、遍历文件,做处理;对于遍历文件夹,也可以使用mathworks网站上的函数dirr轻松搞定。下面是饮水思源论坛上的做法。没有进行整理。敬请原谅。
论坛地址:
现在有个文件夹data中的数据想要批量处理,
而data中有多个子文件夹,名字分别为01001,01002,…,每个子文件夹中有多个数据,假设为ECG.txt,PCG.txt,…。
现在我想要依次读取01001中的各数据进行处理,然后读取01002中的进行处理,依此类推,直到将data文件夹中的数据全都处理完。
我知道在labview中可以把文件夹的名字弄成字符拼接后可以不断的循环读取,不知道在matlab中如何实现这样的功能?
因为这几天连着做实验,今天才有时间上网看一下,
回复比较晚。刚刚下载了名为dirr.m的文件。LIST=DIRR('D:\data');可以实现将data中的子文件夹全都读取进来。存为一个名为LIST的struct。
以01001文件夹中的数据为例,可以知道每个数据的位置了,可是我应该如何读取出来呢?
例如LIST(1).isdir(1)中的是CPT.txt,但是我只能得到一个存有该文件名字和大小等的struct格式,
不知道应该如何读入该数据。eval命令不知道该如何用?试了一下eval(LIST(1).isdir(1)),出现错误,
说是该命令不能做struct类。
cottonsugar (棉花糖) 于 2009年09月23日18:25:30 星期三) 提到:
fl=dirr('./');nl=length(fl);for i=1:nl fname=fl(i).name; if strcmp(fname,'XXXX') str=['load ',fname];eval(str);enden
最后的关键就在于load那句了。str=['load(D:\data\',fl(i).name,'\',fname,')'];因为load在用的时候是:load('D:\data\01001\ECG.txt');
现在我无法加上那个括号里面的一撇',所以总是无法把数据load上。请问这个一撇怎么加上呢?谢谢啦。我改了以后的程序如下:
fl=dirr('D:\data');nl=length(fl);nl2=length(fl(1).isdir);
for i=1:nl for j=1:nl2 fname=fl(i).isdir(j).name;
if strcmp(fname,'ECG.txt') str=['load(D:\data\',fl(i).name,'\',fname,')'];eval(str);
end
end
end
比如你想load一个文件 load('d:\ecg.txt');
用string来表示就是str=['load(''d:\ecg.txt'');'];然后再eval(str)即可
Matlab如何循环读取文件的更多相关文章
- 循环读取文件夹中的图片matlab代码
参考:http://blog.csdn.net/guoxiaojie_415/article/details/21317323:http://blog.csdn.net/qikaihuting/art ...
- Halcon中循环读取文件的实现以及数字与字符的转换
在循环读取文件的位置时,常用到数字与字符的转换. 数字与字符的转换 将字符转换为数字 tuple_number(StringImageIndex,IntImageIndex)` 1 2 1 2 将数字 ...
- Day16_95_IO_循环读取文件字节流read()方法(四)
循环读取文件字节流read()方法(四) 使用 int read(byte[] bytes) 循环读取字节流数据 import java.io.FileInputStream; import java ...
- Day16_94_IO_循环读取文件字节流read()方法(二)
循环读取文件字节流read()方法 通过read()循环读取数据,但是read()每次都只能读取一个字节,频繁读取磁盘对磁盘有伤害,且效率低. import java.io.FileInputStre ...
- linux 循环读取文件的每一行
在Linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法.为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率. ...
- python 3.x 循环读取文件用户登录
import os # 导入python自带库的模块 import sys # 导入python自带库的模块 import getpass # 导入python自带库的模块 lock_file = ' ...
- windows 和 linux 上 循环读取文件名称的区别和方法
function showGetFileName($type){ $url="/opt/mobile_system/gscdn"; //另一台服务器映射到linux过来的路径. # ...
- C#循环读取文件流,按行读取
public Dictionary<string,string> GetSourceDisksElements(String section) { section = "[&qu ...
- python numpy实现多次循环读取文件 等间隔过滤数据
numpy的np.fromfile会出现如下的问题,只能一次性读取文件的内容,不能追加读取,连续两次的np.fromfile读到的东西一样 如果数据文件太大(几个G或以上)不能一次性全读进去,需要追加 ...
随机推荐
- 服务端、实时、大数据、AI计算
服务端.实时.大数据.AI计算,各种各样的计算,计算机本质是什么,计算机的本质是 利用compute的计算速度为人提供更优的计算结果. 所以实时也好,准实时.离线.AI本质上是两个维度,实时准实时强调 ...
- 3451: Tyvj1953 Normal 点分治 FFT
国际惯例的题面:代价理解为重心和每个点这个点对的代价.根据期望的线性性,我们枚举每个点,计算会产生的ij点对的代价即可.那么,i到j的链上,i必须是第一个被选择的点.对于i来说,就是1/dis(i,j ...
- Python3NumPy——ndarray对象
Python3NumPy——ndarray对象 1.前沿 推荐导入语法:import numpy as np NumPy中使用ndarray对象表示数组,ndarray是NumPy库的核心对象 2.创 ...
- 不在框架中,利用Django的models操作
import os import sys import django sys.path.apprnd(r'路径') os.chdir(r'路径') os.environ.setdefault('DJA ...
- db2调优
系统上线两个月左右,请IBM工程师对数据库进行了一次调优,主要收获感觉有以下几点: 1,应用服务器一定要与数据库服务器分开 2,如果存在多个数据库,一定要硬盘分开(io忙) 3,每个数据库的数据与日志 ...
- 未能加载文件或程序集“Benlai.SOA.Framework.Common, Version=1.4.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。
未能加载文件或程序集“Benlai.SOA.Framework.Common, Version=1.4.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个 ...
- Java基础-多线程-①线程的创建和启动
简单阐释进程和线程 对于进程最直观的感受应该就是“windows任务管理器”中的进程管理: (计算机原理课上的记忆已经快要模糊了,简单理解一下):一个进程就是一个“执行中的程序”,是程序在计算机上的一 ...
- mysql yum安装
# 下载yum源的rpm包wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm# 安装rpm包rpm - ...
- yum离线安装rpm包
CentOS利用yum下载好rpm包,并离线安装 1.联网安装好rpm包,并将下载好的包备好 #yum install --downloadonly --downloaddir=/home/sam ...
- MySQL replicate-ignore-db详解
1:官方的解释是:在主从同步的环境中,replicate-ignore-db用来设置不需要同步的库.解释的太简单了,但是里面还有很多坑呢. 生产库上不建议设置过滤规则.如果非要设置,那就用Replic ...