爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 23550|回复: 12

[分享资料] .grd 数据处理

[复制链接]

新浪微博达人勋

发表于 2021-7-6 20:09:51 | 显示全部楼层 |阅读模式

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

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

x
Traceback (most recent call last):
  File "e:/Study/Data_assimilation/paper/model2data/DATA_back200/result/nature2sta.py", line 18, in <module>
    ds_anal = open_CtlDataset('E:/Study/Data_assimilation/paper/model2data/DATA_back200/ensemble/anal/mean/t30.ctl')
  File "e:\Study\Data_assimilation\paper\model2data\DATA_back200\result\xgrads\io.py", line 118, in open_CtlDataset
    raise Exception('incomplete file for ' + file +
Exception: incomplete file for E:/Study/Data_assimilation/paper/model2data/DATA_back200/ensemble/anal/mean/1982010100.grd (not multiple of 239616 bytes)
各位大牛看一下这是什么错误但是这个数据文件是有的,下面是我的ctl文件。
DSET ^%y4%m2%d2%h2.grd
TITLE SPEEDY MODEL OUTPUT
UNDEF -9.99E33
OPTIONS template big_endian
XDEF 96 LINEAR 0.0 3.75
YDEF 48 LEVELS  -87.159 -83.479 -79.777 -76.070 -72.362 -68.652 -64.942 -61.232 -57.521 -53.810 -50.099 -46.389 -42.678 -38.967 -35.256 -31.545 -27.833 -24.122 -20.411 -16.700 -12.989  -9.278  -5.567  -1.856   1.856   5.567   9.278  12.989  16.700  20.411  24.122  27.833  31.545  35.256  38.967  42.678  46.389  50.099  53.810  57.521  61.232  64.942  68.652  72.362  76.070  79.777  83.479  87.159
ZDEF 8 LEVELS  0.950 0.835 0.685 0.510 0.340 0.200 0.095 0.025
TDEF 4381 LINEAR 00Z01JAN1982 6HR
VARS 6
U 4 99 U-wind [m/s]
V 4 99 V-wind [m/s]
T 2 99 Temperature [K]
Q 1 99 Specific Humidity [kg/kg]
PS 0 99 Surface Pressure [Pa]
RAIN 0 99 Precipitation [mm/6hr]
ENDVARS

这是数据文件

这是数据文件
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2021-7-7 10:10:43 | 显示全部楼层
ctl可能写的不对,按照ctl描述,你的一个grd文件应该是239616 bytes(就和报错信息一致),但实际上是612k。再检查下吧
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-7-7 16:05:39 | 显示全部楼层
lqouc 发表于 2021-7-7 10:10
ctl可能写的不对,按照ctl描述,你的一个grd文件应该是239616 bytes(就和报错信息一致),但实际上是612k ...

DSET ^%y4%m2%d2%h2.grd
TITLE SPEEDY MODEL OUTPUT
UNDEF -9.99E33
OPTIONS template big_endian
XDEF 96 LINEAR 0.0 3.75
YDEF 48 LEVELS  -87.159 -83.479 -79.777 -76.070 -72.362 -68.652 -64.942 -61.232 -57.521 -53.810 -50.099 -46.389 -42.678 -38.967 -35.256 -31.545 -27.833 -24.122 -20.411 -16.700 -12.989  -9.278  -5.567  -1.856   1.856   5.567   9.278  12.989  16.700  20.411  24.122  27.833  31.545  35.256  38.967  42.678  46.389  50.099  53.810  57.521  61.232  64.942  68.652  72.362  76.070  79.777  83.479  87.159
ZDEF 8 LEVELS  0.950 0.835 0.685 0.510 0.340 0.200 0.095 0.025
TDEF 10000 LINEAR 00Z01JAN1982 6HR
VARS 6
U 8 99 U-wind [m/s]
V 8 99 V-wind [m/s]
T 8 99 Temperature [K]
Q 8 99 Specific Humidity [kg/kg]
PS 0 99 Surface Pressure [Pa]
RAIN 0 99 Precipitation [mm/6hr]
ENDVARS
上面这个ctl是最初的描述,我想要分析资料时间从1982010100到1984123100,所以我将TDEF 10000 LINEAR 00Z01JAN1982 6HR中10000改成4381,就是跑出来的图片上的数据文件,原始分析资料的时间从1982010100到1983030100,我仔细看了他的程序,程序在运行过程中是将ctl文件分别复制自己创建的目录中,我再没有改其它的内容,这样的话,ctl格式文件该怎么样描述,请指教。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-7-7 16:54:44 | 显示全部楼层
这里的问题和时间t没有关系,写4381没问题。
变量后面出现的第一个数字代表层数,你使用的ctl里面修改了原本的参数,导致读取失败。这里需要保留原本的参数,不能随意修改。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-7-7 17:37:01 | 显示全部楼层
lqouc 发表于 2021-7-7 16:54
这里的问题和时间t没有关系,写4381没问题。
变量后面出现的第一个数字代表层数,你使用的ctl里面修改了原 ...

U 8 99 U-wind [m/s]
V 8 99 V-wind [m/s]
T 8 99 Temperature [K]
Q 8 99 Specific Humidity [kg/kg]
PS 0 99 Surface Pressure [Pa]
RAIN 0 99 Precipitation [mm/6hr]
这是原始的,但是程序跑完之后自动生成下面的啦
U 4 99 U-wind [m/s]
V 4 99 V-wind [m/s]
T 2 99 Temperature [K]
Q 1 99 Specific Humidity [kg/kg]
PS 0 99 Surface Pressure [Pa]
RAIN 0 99 Precipitation [mm/6hr]
如果我在改过来的话,应该可以吧
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-7-7 21:14:01 | 显示全部楼层
lqouc 发表于 2021-7-7 16:54
这里的问题和时间t没有关系,写4381没问题。
变量后面出现的第一个数字代表层数,你使用的ctl里面修改了原 ...

非常感谢大牛,已解决,为你点个赞
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-7-8 08:50:31 | 显示全部楼层
lqouc 发表于 2021-7-7 16:54
这里的问题和时间t没有关系,写4381没问题。
变量后面出现的第一个数字代表层数,你使用的ctl里面修改了原 ...

您好,大神 .grd格式的数据能转换成nc格式的吗?我想用ncl处理更方便。我在网上找了数据格式转换的命令如下:
from xgrads import open_CtlDataset
open_CtlDataset('E:/Study/Data_assimilation/paper/model2data/DATA_back200/nature/t30.ctl').to_netcdf('output.nc')
但是报错了
File "e:/Study/Data_assimilation/paper/model2data/DATA_back200/result/grd2nc.py", line 3, in <module>
    open_CtlDataset('E:/Study/Data_assimilation/paper/model2data/DATA_back200/nature/t30.ctl').to_netcdf('output.nc')
  File "D:\ProgramData\Anaconda3\lib\site-packages\xarray\core\dataset.py", line 1784, in to_netcdf
    return to_netcdf(
  File "D:\ProgramData\Anaconda3\lib\site-packages\xarray\backends\api.py", line 1035, in to_netcdf
    _validate_attrs(dataset, invalid_netcdf=invalid_netcdf and engine == "h5netcdf")
  File "D:\ProgramData\Anaconda3\lib\site-packages\xarray\backends\api.py", line 172, in _validate_attrs
    check_attr(k, v, valid_types)
  File "D:\ProgramData\Anaconda3\lib\site-packages\xarray\backends\api.py", line 164, in check_attr
    raise TypeError(
TypeError: Invalid value for attr 'pdef': None. For serialization to netCDF files, its value must be of one of the following types: str, Number, ndarray, number, list, tuple
有什么其它办法吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-7-8 10:41:00 | 显示全部楼层
任性小王子 发表于 2021-7-8 08:50
您好,大神 .grd格式的数据能转换成nc格式的吗?我想用ncl处理更方便。我在网上找了数据格式转换的命令如 ...

我不清楚你用的函数里面是怎么操作的,报错信息也不是很有帮助。
在grads里面是可以实现转换nc的,可以grads在官网查看具体的转换命令:sdfwrite (http://cola.gmu.edu/grads/gadoc/gadocindex.html)
实在不想用grads处理的话,可以试试去掉ctl里面的template参数,直接用ctl指向某一个具体数据文件。我猜测可能是这里有问题,如果不能解决就没办法了。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-7-8 16:46:39 | 显示全部楼层
lqouc 发表于 2021-7-8 10:41
我不清楚你用的函数里面是怎么操作的,报错信息也不是很有帮助。
在grads里面是可以实现转换nc的,可以g ...

我原先试着使用过grads进行数据处理,但是绘图效果不佳,我就放弃了,于是我就想用其他方式转换数据格式,最后确定打算用Python脚本xgrade处理,见网址https://github.com/miniufo/xgrads,我使用下面命令处理
from xgrads import open_CtlDataset
open_CtlDataset('input.ctl').to_netcdf('output.nc')
但是报错了TypeError: Invalid value for attr 'pdef': None. For serialization to netCDF files, its value must be of one of the following types: str, Number, ndarray, number, list, tuple
类型错误:attr 'pdef' 的值无效:无。 要序列化为 netCDF 文件,其值必须是以下类型之一:str、Number、ndarray、number、list、tuple
如果具体指向某一个数据文件,可能ctl描述文件得写好多个,比较麻烦,所以大神还有更好的建议吗?
最好能用到我发的网址xgrads一次性转换为nc文件,这样处理起来就会很方便。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-8-25 23:49:06 | 显示全部楼层
任性小王子 发表于 2021-7-8 16:46
我原先试着使用过grads进行数据处理,但是绘图效果不佳,我就放弃了,于是我就想用其他方式转换数据格式 ...

请问楼主解决没?我也是报这个错,说pdef这个属性。。不知道要怎么调整
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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