- 积分
- 5344
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-8-28
- 最后登录
- 1970-1-1
|
发表于 2019-4-7 09:13:44
|
显示全部楼层
这个问题其实十分容易啊,如果你要全部文件都画,可以借鉴楼上说的,用glob或者os库把文件夹里边的文件做一个list,之后用for i in list:去循环文件名,不乏是一个暴力解决的办法。
其实这个还有另一种解决的办法,个人觉得是最佳的解决办法。
首先,你可以注意到大部分这种文件的文件名都是有关于日期的,那不如从文件名的构造上下手,通过日期补出文件名?
Python相比NCL和Fortran,在时间处理上十分有一手,其中就是以datetime和dateutil库为代表。
算法思路:
①通过规则构建需要的时间列表。
②在循环当中,将时间按规则填入,形成文件名
③打开对应文件,读入数据绘图
这个关键就是在于datetime和dateutil库中的rrlue模块的正确使用:
dateutil库中的rrlue模块就是用于按规则生成一个时间的list。
datetime库主要负责日期类型数据的管理,比如把日期的年月日提取出来。
比如说楼主的20190601.nc一直到20190630.nc一共30个文件,其实这个就是逐日的文件,文件名只要填入日期年月日就好:
import datetime
from dateutil.rrule import *
bg_time=datetime.datetime(2019,6,1,0,0)
ed_time=datetime.datetime(2019,6,30,0,0)
time_list=list(rrule(DAILY,interval=1,dtstart=bg_time,until=ed_time))
最重要的就是这个rrlue规则
①DAILY是步长的单位,其他可选项包括YEARLY(年)、MONTHLY(月)甚至SECONDLY(秒)都可实现
②interval=,这个是步长的大小,不设置时默认为1。
③dtstart=,起始的时间,必须是datetime类型的时间数据。
④until=,终止的时间,也必须是datetime类型的时间数据。
list()把这个转成一个列表用于循环即可。
剩下就是如何补出文件名了,推荐就是用格式化输出的,或者是时间戳(timestamp)、时间格式(strftime),你可以尝试以下代码(格式化输出),看看文件名是不是生成对了:
for i in time_list:
filename='%04d%02d%02d.nc'%(i.year,i.month,i.day)
print(filename)
这个做法最大的好处就是我的步长可以随意控制。
参考库的说明页:
[datetime库]
https://docs.python.org/3/library/datetime.html#module-datetime
[dateutil库]
https://dateutil.readthedocs.io/en/stable/
|
|