netcdf4-python:读取变量存储参数

问题描述

我正在尝试手动将NetCDF文件的所有尺寸,变量和属性复制到新文件中。与copy netcdf file using python中的方法一样,除了“ fill_value”或“ chunksizes”之类的存储参数外,此方法都有效。在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”或“ chunksizes”之类的参数?读取这些参数的语法是什么?

解决方法

有关块大小的信息,可以对变量使用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上游发布问题。

,

谢谢,这就像一个魅力! 我已经解决了对未定义的_FillValue的处理,例如:

try: fillVal = variable._FillValue
except: fillVal = netCDF4.default_fillvals[str(variable.dtype.kind)+str(variable.dtype.itemsize)]

看起来有点复杂,但是dtype似乎没有针对default_fillvals的预期输入的输出格式方法

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...