爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13359|回复: 4

[求助] 怎么样读取一个月的数据画图?

[复制链接]

新浪微博达人勋

发表于 2019-4-5 19:31:13 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
如题,刚学会python画图不久,但是对循环不太了解,想问下怎么样读取30天的文件画30副图?图已经一幅一幅画完了,但是不甘心,操作太操蛋了。文件的名字都是统一的,比如文件1的名字是20190601.nc,一直到20190630.nc,觉得是可以用循环操作完成的,但是自己研究了半天没研究明白。希望会的人分享一下经验谢谢了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 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/
密码修改失败请联系微信:mofangbao
回复 支持 3 反对 0

使用道具 举报

新浪微博达人勋

发表于 2019-4-7 07:29:15 | 显示全部楼层
不用循环,用glob的库将所有文件名读入即可
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-4-11 01:06:19 | 显示全部楼层
Masterpiece 发表于 2019-4-7 09:13
这个问题其实十分容易啊,如果你要全部文件都画,可以借鉴楼上说的,用glob或者os库把文件夹里边的文件做一 ...

非常感谢,最近在外学习,回去以后实验一下
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-4-11 01:06:23 | 显示全部楼层
Masterpiece 发表于 2019-4-7 09:13
这个问题其实十分容易啊,如果你要全部文件都画,可以借鉴楼上说的,用glob或者os库把文件夹里边的文件做一 ...

非常感谢,最近在外学习,回去以后实验一下
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表