我正在尝试手动将NetCDF文件的所有维度、变量和属性复制到新文件中。就像在copy netcdf file using python中一样,除了'fill_value‘或’chunksize‘这样的存储参数之外,它工作得很好。在ncdump -sch中,这些参数显示时带有前导下划线(_):
float var1(time, lat, lon) ;
var1:_FillValue = NaNf ;
var1:grid_mapping = "crs" ;
var1:unit = "m" ;
var1:_Storage = "chunked" ;
var1:_ChunkSizes = 1, 14, 146 ;
var1:_DeflateLevel = 9 ;
var1:_Shuffle = "true" ;
var1:_Endianness = "little" ;在createVariable中,我可以为新变量设置这些参数,但是如何使用netcdf4-python模块从现有文件中获取像'fill_value‘或’chunksize‘这样的参数呢?读取这些参数的语法是什么?
发布于 2020-10-30 09:54:55
有关块大小的信息,可以对变量使用chunking()方法。不幸的是,看起来您只能在_FillValue被设置为非默认值时才能访问它:
from netCDF4 import Dataset
import numpy as np
nc = Dataset('data.nc', 'w')
nc.createDimension('t', 10)
var = nc.createVariable('temp', 'f', ('t',), fill_value=80)
var[:] = np.arange(10)
nc.close()
nc_read = Dataset('data.nc')
temp = nc_read.variables['temp']
print(temp.chunking())
print(temp._FillValue)所以现在看起来处理填充值的最简单的方法是:
fill = getattr(temp, '_FillValue', mydefaultvalue)可能值得在GitHub上上游打开一个问题。
发布于 2020-10-30 21:33:29
谢谢你,这真是太棒了!我现在已经解决了对未定义的_FillValue的处理,如下所示:
try: fillVal = variable._FillValue
except: fillVal = netCDF4.default_fillvals[str(variable.dtype.kind)+str(variable.dtype.itemsize)]看起来有点复杂,但是对于default_fillvals的预期输入,dtype似乎没有输出格式方法
https://stackoverflow.com/questions/64589975
复制相似问题