| 
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  xgrads库在ctl转nc中存在的不足及修改1、问题描述 ctl文件dset C:\Users\马冠龙\Desktop\python\EOF\sstpx.grd title Coads SSTA
 undef -999.0
 xdef 18 linear 120 10
 ydef 12 linear -27.5 5
 zdef 1 linear 1000 1
 tdef 516 linear 1jan1948 1month
 vars 1
 S    0 99  Coads SST anomaly interperated using
 endvarsfrom xgrads import CtlDescriptor, open_CtlDataset
 ​
 #ctl数据转nc
 ds = open_CtlDataset(r'SSTPX.ctl',encoding='utf-8')
 ctl = CtlDescriptor(file=r'SSTPX.ctl',encoding='utf-8')
 ds.attrs['pdef' ] = 'None'
 ds.to_netcdf('E:SSTPX.nc')
 报错 ValueError: invalid literal for int() with base 10: '1mon'
 2、解决方案 出现这种情况是因为xgrads库中没有考虑到 month year minute等情况,所以我们在字典中加入,并做简单修改 原始库代码见下图 修改代码为:def GrADS_increment_to_timedelta64(incre): """
 Convert GrADS time increment string to numpy.timedelta64
 
 Parameters
 ----------
 incre : str
 Grads time increment in str format e.g., 1dy.
 
 Returns
 ----------
 re : timedelta64
 """
 amount = re.sub("\D", "", incre)
 unit = re.sub(amount, "", incre)
 ​
 unitDict = {
 'se': 's',
 'mn': 'm',
 'hr': 'h',
 'dy': 'D',
 'mo': 'M',
 'yr': 'Y',
 'second':'s',
 'minute':'m',
 'hour':'h',
 'day':'d',
 'month':'M',
 'year':'Y'}
 ​
 return timedelta64(int(amount), unitDict[unit])
 
 
 
 |