爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14096|回复: 4

[经验总结] 代码分享:提取nc文件的具体时间

[复制链接]

新浪微博达人勋

发表于 2020-7-16 19:26:15 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 平流层的萝卜 于 2020-7-16 19:37 编辑

之前用EC的再分析资料时,经常会产生这样的疑问:nc文件的某一个时次,对应的是哪年哪月哪日哪时呢?用grads的 q ctlinfo 命令,当然立刻就能得到答案。但怎么用Python得到每一个时次对应的具体时间呢?自己推算肯定太笨了。
经过一通研究发现,用NetCDF4模块的num2date方法,就可以得到每一个时次对应的具体时间t,但t的type是datetime,再简单粗暴地用str(t)即可将其转换为字符串,即可进行图上时间标注一类的操作。

示例代码如下:

import numpy as np
from mpl_toolkits.basemap import Basemap
import netCDF4 as nc
import matplotlib.pyplot as plt

ncfile=nc.Dataset(r'850hPa_uv_2020june_jul.nc')
times,time_unit=ncfile.variables['time'][:],ncfile.variables['time'].units

result=nc.num2date(times[:3],units=time_unit)

print('将nc文件的前三个时次都转换成时间(datetime格式):',result)


result_in_string_format=[str(i) for i in result]
print('再将上一步结果再转换成字符串:',result_in_string_format)


结果如下:
  1. 将nc文件的前三个时次都转换成时间(datetime格式): [datetime.datetime(2020, 6, 1, 0, 0) datetime.datetime(2020, 6, 1, 6, 0)
  2. datetime.datetime(2020, 6, 1, 12, 0)]
  3. 再将上一步结果再转换成字符串: ['2020-06-01 00:00:00', '2020-06-01 06:00:00', '2020-06-01 12:00:00']
复制代码









密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-7-16 23:20:42 | 显示全部楼层
用xarray很方便。
比如 f=xr.open_dataset(file)
time=f.time就可以读出来。
特定时次可以用var.time读取。
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-16 19:32:59 | 显示全部楼层
格式编辑总有问题,试了好几次都不行。就这样吧,能看懂就行。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-8-10 10:00:22 | 显示全部楼层
感谢,学习了{:eb502:}{:eb502:}

评分

参与人数 1金钱 +20 贡献 +2 收起 理由
平流层的萝卜 + 20 + 2

查看全部评分

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-8-12 21:25:49 | 显示全部楼层
学习了,谢谢分享
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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