matlab批量修改文件名并自动保存
2015-08-26 09:52
676 查看
答案就这一句话:s=datestr(info.FileModDate,'yyyymmddHHMMSS')
基本思路:获取info函数,查看info所能获取的功能,然后直接调用该功能就可以了。
1.对于数据处理初学者来说,如何批量对数据文件进行重命名呢?
有人提出了以下算法:
x = dir('D:\Program Files\MATLAB\R2010b\test\test\*.a');
y = dir('D:\Program Files\MATLAB\R2010b\test\test\*.b');
z=[x;y]
l = length(z);
filename = 'filename';
for k=1:l
system(['ren "D:\Program Files\MATLAB\R2010b\test\test\' z(k).name '" ' filename int2str(k) '.bmp']);
end;
那么问题一:如何把文件按照特定的顺序保存到任意路径中呢:
imwrite(f{j},['D:\DATA\Guldum_airglow\data_diff\20150718\',num2str(j),'.tif']);
问题二:如何按照自己想要的模式排列呢?比如按照日期重命名:
按日期命名的话就把int2str(k)改为datestr(datenum(x(k).date),30)
附:处理数据时难免会遇到一些与日期有关的函数,为便于随时查看,整理了一些与日企有关的函数:
<1> date ,now,clock
1.date:按照日期字符串格式返回当前系统日期
2.now:按照连续的日期数值格式返回当前系统时间
3.clock:按照日期向量格式返回当前系统时间
>> date,now,clock
ans =
09-Apr-2011
ans =
7.3460e+005
ans =
1.0e+003 *
2.0110 0.0040 0.0090 0.0170 0.0430 0.0470
<2> year,month,day,hour,minute,second
matlab中分别使用year,month,day,hour,minute,second从上面讲到的字符串和连续型日期时间格式中提取年月日时分秒等信息
>>[year(date),year(now)]
ans =
2011 2011
注意:上面的函数是没法从向量型日期时间格式中正确读取上述信息的
>>year(clock)
ans =
5 0 0 0 0 0
<3> Matlab中处理日期与时间的函数详解
Matlab用三种格式来表示日期与时间
1.双精度型日期数字:一个日期型数字代表从公元0年到某一日期的的天数,例如,2008年8月26日夜时0点钟被表示为733646,而这同一天的中午12点就被表示为733646.5,也就是说任何一个时刻都可以用一个双精度型数字表示。
2.不同形式的日期字符串:Matlab定义了28种标准日期格式的字符串。
3.数值型的日期向量:用一个6元数组来表示一个日期时间,例如,[2008 8 26 12 5 0]表示2008年8月26日12点05分0秒;用一个3元数组来表示一个日期,例如,[2008 8 26]表示2008年8月26日。
<4>用日期数字表示日期使计算机更容易计算,但是不直观,因此Matlab提供了许多函数来实现三种日期格式之间的转化。
1.datestr: 实现将日期数字和日期向量转化为日期字符串,可以在Matlab命令窗口中输入help datestr来查看关于datestr的用法。
2.datenum: 实现将日期字符串和日期向量转化为日期数字,可以在Matlab命令窗口中输入help datenum来查看关于datenum的用法。
3.datevec: 实现将日期数字和日期字符串转化为日期向量,可以在Matlab命令窗口中输入来help datevec查看关于datevec的用法。
<5> Matlab中其他常用的函数:
1.clock:将当前时间和日期返回到一个(6元)数组中。
>> T = clock
T =
2008 8 26 12 31 32.75
注:直接输出clock时,可能会以科学计数法的方式输出,
clock
ans =
1.0e+003 *
2.0100 0.0010 0.0280 0.0190 0.0280 0.0296
用fix(clock) 则能输出易于阅读的形式
fix(clock)
ans =
2010 1 28 19 28 48
3.now:将当前时间和日期以一个双精度型日期数字返回。
>> t = now
t =
7.3365e+005
4.date:将当前时间和日期以dd-mmm-yyyy格式的字符串返回。
>> d = date
d =
26-Aug-2008
5.weekday:返回一个日期数字或一个日期字符串的星期及一个星期中的第几天。
>> [d,w]=weekday('26-Aug-2008')
d =
3
w =
Tue
>> [d,w]=weekday(733646)
d =
3
w =
Tue
6.eomday:返回一个月的最后一天。
>> eomday(2008,2)
ans =
29
7.calendar:对用户要求的任何一个月生一个日历并显示在命令窗口中,或将其放在一个6×7的矩阵中。
>> calendar(2008,8)
Aug 2008
S M Tu W Th F S
0 0 0 0 0 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 0 0 0 0 0 0
>> c=calendar(2008,8)
c =
0 0 0 0 0 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 0 0 0 0 0 0
8.tic,toc:函数tic和toc被用来对一组Matlab运算进行计时。Tic启动一个秒表,toc停止这个秒表并计算出所经历的时间。
>> tic;plot(rand(50,5));toc
Elapsed time is 3.302510 seconds.
9.cputime:函数cputime返回用秒表示的、自从当前的Matlab周期启动之后Matlab所占用的CPU时间。
10.datetick:用来自动完成对数据进行图形显示并且用日期或时间字符串来作坐标的标签。
>> y=[1998 1998 1999*ones(1,12)];
>> m=[11 12 (1:12)];
>> s=[1.1 1.3 1.2 1.4 1.6 1.5 1.7 1.6 1.8 1.3 1.9 1.7 1.6 1.95];
>> bar(datenum(y,m,1),s)
>> datetick('x','mmmyy')
>> ylabel('$ Million')
>> title('Figure 15.2:Monthly Sales')
http://eelab.tsinghua.edu.cn/czzheng/blog/10-01/184048_13d5c.html
1.now 返回当前的日期值(这个数的整数部分表示从公元0年1月1日到该日的天数,小数部分则表示具体的时刻)
eg.
t=now
t =7.3354e+005
2.datestr 日期转换成字符形式
调用格式 datestr(date,dateform) date为要转换的日期值,dateform为日期格式参数(具体参数值可通过 help datestr查看帮助)
3.dateform参数说明
DATEFORM number DATEFORM string Example
======================================================================
=====
0 'dd-mmm-yyyy HH:MM:SS' 01-Mar-2000 15:45:17
1 'dd-mmm-yyyy' 01-Mar-2000
2 'mm/dd/yy' 03/01/00
3 'mmm' Mar
4 'm' M
5 'mm' 03
6 'mm/dd' 03/01
7 'dd' 01
8 'ddd' Wed
9 'd' W
10 'yyyy' 2000
11 'yy' 00
12 'mmmyy' Mar00
13 'HH:MM:SS' 15:45:17
14 'HH:MM:SS PM' 3:45:17 PM
15 'HH:MM' 15:45
16 'HH:MM PM' 3:45 PM
17 'QQ-YY' Q1-96
18 'QQ' Q1
19 'dd/mm' 01/03
20 'dd/mm/yy' 01/03/00
21 'mmm.dd,yyyy HH:MM:SS' Mar.01,2000 15:45:17
22 'mmm.dd,yyyy' Mar.01,2000
23 'mm/dd/yyyy' 03/01/2000
24 'dd/mm/yyyy' 01/03/2000
25 'yy/mm/dd' 00/03/01
26 'yyyy/mm/dd' 2000/03/01
27 'QQ-YYYY' Q1-1996
28 'mmmyyyy' Mar2000
29 (ISO 8601) 'yyyy-mm-dd' 2000-03-01
30 (ISO 8601) 'yyyymmddTHHMMSS' 20000301T154517
31 'yyyy-mm-dd HH:MM:SS' 2000-03-01 15:45:17eg.
>> t=now;
datestr(t,0)ans =09-May-2008 21:07:23
date将字符串转换成日期值
调用语法:date(year,month,day)
datenum(year,month,day,hour,minute,second)
eg.>> t=now;datestr(t,0)ans =09-May-2008 21:07:23>> datenum(ans)
ans =7.3354e+005>>4.datevec将datestr中指定的格式日期字符转换成包含日期分量的数值向量
eg.
>>c=datevec('09-May-2008 21:07:23')c = 2008 5 9 21 7 23
5.weekday 可从一个日期值或字符串中找出具体的日子和星期。
eg.
>> [d,w]=weekday( 7.3354e+005)d = 2
w =Mon>>[d,w]=weekday('21-Dec-2008')d = 1
w =Sun6.eomday 返回任何一个月最后一天是几号
调用语法:eomday(year,month) 因为闰年的存在故需要year这个参数。
eg.>> eomday(2008,2)ans = 29>> eomday(2007,2)ans = 287.calendar 生成指定月份的日历。
eg
>> calendar(date)
May 2008
S M Tu W Th F S
0 0 0 0 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
0 0 0 0 0 0 0
>> calendar(2008,5)
May 2008
S M Tu W Th F S
0 0 0 0 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
0 0 0 0 0 0 0
>>
补充:date返回当天日期的字符串
eg.
>> dateans =09-May-20088.tic ,toc 两个结合使用可计算一组matlab操作指令的执行所需时间
eg.
>> tic; plot(rand(500,5));toc
Elapsed time is 0.078000 seconds.
另外Matlab还提供了cputime和etime(具体使用方法可看帮助文档),用来计算一次运算所占cpu时间.
eg.
>>t0=cputime;myoperation;cputime-t0
ans=0.1400
>>t1=clock;myoperation;etime(clock,t1)
ans=11.2800
注:myoperation为用户自定义脚本文件
>> t0=cputimet0 = 53.8125>> t1=cputimet1 = 54.0313>> deltaT=t1-t0deltaT = 0.2188
>> t1=clockt1 =1.0e+003 * 2.0080 0.0050 0.0090 0.0210 0.0460 0.0254>> deltaT=etime(t1,t0)
deltaT = 9.9060>>
9.datetick 设一个坐标为时间标签eg.
>> t=(1900:10:1990)';
>> p=[100 200 150 350 200 400 500 100 30 120];
>> plot(datenum(t,1,1),p);
>> datetick('x','yyyy')
>> title('test time tip')
基本思路:获取info函数,查看info所能获取的功能,然后直接调用该功能就可以了。
1.对于数据处理初学者来说,如何批量对数据文件进行重命名呢?
有人提出了以下算法:
x = dir('D:\Program Files\MATLAB\R2010b\test\test\*.a');
y = dir('D:\Program Files\MATLAB\R2010b\test\test\*.b');
z=[x;y]
l = length(z);
filename = 'filename';
for k=1:l
system(['ren "D:\Program Files\MATLAB\R2010b\test\test\' z(k).name '" ' filename int2str(k) '.bmp']);
end;
那么问题一:如何把文件按照特定的顺序保存到任意路径中呢:
imwrite(f{j},['D:\DATA\Guldum_airglow\data_diff\20150718\',num2str(j),'.tif']);
问题二:如何按照自己想要的模式排列呢?比如按照日期重命名:
按日期命名的话就把int2str(k)改为datestr(datenum(x(k).date),30)
附:处理数据时难免会遇到一些与日期有关的函数,为便于随时查看,整理了一些与日企有关的函数:
<1> date ,now,clock
1.date:按照日期字符串格式返回当前系统日期
2.now:按照连续的日期数值格式返回当前系统时间
3.clock:按照日期向量格式返回当前系统时间
>> date,now,clock
ans =
09-Apr-2011
ans =
7.3460e+005
ans =
1.0e+003 *
2.0110 0.0040 0.0090 0.0170 0.0430 0.0470
<2> year,month,day,hour,minute,second
matlab中分别使用year,month,day,hour,minute,second从上面讲到的字符串和连续型日期时间格式中提取年月日时分秒等信息
>>[year(date),year(now)]
ans =
2011 2011
注意:上面的函数是没法从向量型日期时间格式中正确读取上述信息的
>>year(clock)
ans =
5 0 0 0 0 0
<3> Matlab中处理日期与时间的函数详解
Matlab用三种格式来表示日期与时间
1.双精度型日期数字:一个日期型数字代表从公元0年到某一日期的的天数,例如,2008年8月26日夜时0点钟被表示为733646,而这同一天的中午12点就被表示为733646.5,也就是说任何一个时刻都可以用一个双精度型数字表示。
2.不同形式的日期字符串:Matlab定义了28种标准日期格式的字符串。
3.数值型的日期向量:用一个6元数组来表示一个日期时间,例如,[2008 8 26 12 5 0]表示2008年8月26日12点05分0秒;用一个3元数组来表示一个日期,例如,[2008 8 26]表示2008年8月26日。
<4>用日期数字表示日期使计算机更容易计算,但是不直观,因此Matlab提供了许多函数来实现三种日期格式之间的转化。
1.datestr: 实现将日期数字和日期向量转化为日期字符串,可以在Matlab命令窗口中输入help datestr来查看关于datestr的用法。
2.datenum: 实现将日期字符串和日期向量转化为日期数字,可以在Matlab命令窗口中输入help datenum来查看关于datenum的用法。
3.datevec: 实现将日期数字和日期字符串转化为日期向量,可以在Matlab命令窗口中输入来help datevec查看关于datevec的用法。
<5> Matlab中其他常用的函数:
1.clock:将当前时间和日期返回到一个(6元)数组中。
>> T = clock
T =
2008 8 26 12 31 32.75
注:直接输出clock时,可能会以科学计数法的方式输出,
clock
ans =
1.0e+003 *
2.0100 0.0010 0.0280 0.0190 0.0280 0.0296
用fix(clock) 则能输出易于阅读的形式
fix(clock)
ans =
2010 1 28 19 28 48
3.now:将当前时间和日期以一个双精度型日期数字返回。
>> t = now
t =
7.3365e+005
4.date:将当前时间和日期以dd-mmm-yyyy格式的字符串返回。
>> d = date
d =
26-Aug-2008
5.weekday:返回一个日期数字或一个日期字符串的星期及一个星期中的第几天。
>> [d,w]=weekday('26-Aug-2008')
d =
3
w =
Tue
>> [d,w]=weekday(733646)
d =
3
w =
Tue
6.eomday:返回一个月的最后一天。
>> eomday(2008,2)
ans =
29
7.calendar:对用户要求的任何一个月生一个日历并显示在命令窗口中,或将其放在一个6×7的矩阵中。
>> calendar(2008,8)
Aug 2008
S M Tu W Th F S
0 0 0 0 0 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 0 0 0 0 0 0
>> c=calendar(2008,8)
c =
0 0 0 0 0 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 0 0 0 0 0 0
8.tic,toc:函数tic和toc被用来对一组Matlab运算进行计时。Tic启动一个秒表,toc停止这个秒表并计算出所经历的时间。
>> tic;plot(rand(50,5));toc
Elapsed time is 3.302510 seconds.
9.cputime:函数cputime返回用秒表示的、自从当前的Matlab周期启动之后Matlab所占用的CPU时间。
10.datetick:用来自动完成对数据进行图形显示并且用日期或时间字符串来作坐标的标签。
>> y=[1998 1998 1999*ones(1,12)];
>> m=[11 12 (1:12)];
>> s=[1.1 1.3 1.2 1.4 1.6 1.5 1.7 1.6 1.8 1.3 1.9 1.7 1.6 1.95];
>> bar(datenum(y,m,1),s)
>> datetick('x','mmmyy')
>> ylabel('$ Million')
>> title('Figure 15.2:Monthly Sales')
http://eelab.tsinghua.edu.cn/czzheng/blog/10-01/184048_13d5c.html
1.now 返回当前的日期值(这个数的整数部分表示从公元0年1月1日到该日的天数,小数部分则表示具体的时刻)
eg.
t=now
t =7.3354e+005
2.datestr 日期转换成字符形式
调用格式 datestr(date,dateform) date为要转换的日期值,dateform为日期格式参数(具体参数值可通过 help datestr查看帮助)
3.dateform参数说明
DATEFORM number DATEFORM string Example
======================================================================
=====
0 'dd-mmm-yyyy HH:MM:SS' 01-Mar-2000 15:45:17
1 'dd-mmm-yyyy' 01-Mar-2000
2 'mm/dd/yy' 03/01/00
3 'mmm' Mar
4 'm' M
5 'mm' 03
6 'mm/dd' 03/01
7 'dd' 01
8 'ddd' Wed
9 'd' W
10 'yyyy' 2000
11 'yy' 00
12 'mmmyy' Mar00
13 'HH:MM:SS' 15:45:17
14 'HH:MM:SS PM' 3:45:17 PM
15 'HH:MM' 15:45
16 'HH:MM PM' 3:45 PM
17 'QQ-YY' Q1-96
18 'QQ' Q1
19 'dd/mm' 01/03
20 'dd/mm/yy' 01/03/00
21 'mmm.dd,yyyy HH:MM:SS' Mar.01,2000 15:45:17
22 'mmm.dd,yyyy' Mar.01,2000
23 'mm/dd/yyyy' 03/01/2000
24 'dd/mm/yyyy' 01/03/2000
25 'yy/mm/dd' 00/03/01
26 'yyyy/mm/dd' 2000/03/01
27 'QQ-YYYY' Q1-1996
28 'mmmyyyy' Mar2000
29 (ISO 8601) 'yyyy-mm-dd' 2000-03-01
30 (ISO 8601) 'yyyymmddTHHMMSS' 20000301T154517
31 'yyyy-mm-dd HH:MM:SS' 2000-03-01 15:45:17eg.
>> t=now;
datestr(t,0)ans =09-May-2008 21:07:23
date将字符串转换成日期值
调用语法:date(year,month,day)
datenum(year,month,day,hour,minute,second)
eg.>> t=now;datestr(t,0)ans =09-May-2008 21:07:23>> datenum(ans)
ans =7.3354e+005>>4.datevec将datestr中指定的格式日期字符转换成包含日期分量的数值向量
eg.
>>c=datevec('09-May-2008 21:07:23')c = 2008 5 9 21 7 23
5.weekday 可从一个日期值或字符串中找出具体的日子和星期。
eg.
>> [d,w]=weekday( 7.3354e+005)d = 2
w =Mon>>[d,w]=weekday('21-Dec-2008')d = 1
w =Sun6.eomday 返回任何一个月最后一天是几号
调用语法:eomday(year,month) 因为闰年的存在故需要year这个参数。
eg.>> eomday(2008,2)ans = 29>> eomday(2007,2)ans = 287.calendar 生成指定月份的日历。
eg
>> calendar(date)
May 2008
S M Tu W Th F S
0 0 0 0 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
0 0 0 0 0 0 0
>> calendar(2008,5)
May 2008
S M Tu W Th F S
0 0 0 0 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
0 0 0 0 0 0 0
>>
补充:date返回当天日期的字符串
eg.
>> dateans =09-May-20088.tic ,toc 两个结合使用可计算一组matlab操作指令的执行所需时间
eg.
>> tic; plot(rand(500,5));toc
Elapsed time is 0.078000 seconds.
另外Matlab还提供了cputime和etime(具体使用方法可看帮助文档),用来计算一次运算所占cpu时间.
eg.
>>t0=cputime;myoperation;cputime-t0
ans=0.1400
>>t1=clock;myoperation;etime(clock,t1)
ans=11.2800
注:myoperation为用户自定义脚本文件
>> t0=cputimet0 = 53.8125>> t1=cputimet1 = 54.0313>> deltaT=t1-t0deltaT = 0.2188
>> t1=clockt1 =1.0e+003 * 2.0080 0.0050 0.0090 0.0210 0.0460 0.0254>> deltaT=etime(t1,t0)
deltaT = 9.9060>>
9.datetick 设一个坐标为时间标签eg.
>> t=(1900:10:1990)';
>> p=[100 200 150 350 200 400 500 100 30 120];
>> plot(datenum(t,1,1),p);
>> datetick('x','yyyy')
>> title('test time tip')
相关文章推荐
- Matlab实现FR共轭梯度法
- Matlab聚类分析(Cluster Analyses)
- bmp(jpg)和avi互转---matlab实现
- Matlab实现Galton板的动画演示
- VC++和Matlab混合编程(在VC中调用将.m文件生成的DLL)
- Matlab搜索文件夹(包含子文件夹)下文本,提取文本并存储
- Matlab添加yalmip
- 如何在VS中像MATLAB中一样做矩阵运算
- matlab基础
- matlab矩阵取数问题
- matlab_数据拟合
- matlab_文件输入输出
- python numpy笔记:给matlab使用者
- MATLAB相关图书推荐
- Matlab计算Harr Features源码
- matlab转C++ matlab与C++混合编程
- 菜鸟学matlab之智能算法(1)------蚁群算法即相关代码实现详解
- matlab 小波变换
- Matlab自动控制系统应用
- matlab列优先与高维矩阵重构 及 CNN 逐层可视化 on Matlab