netcdf4-python: Чтение параметров хранения переменных

Я пытаюсь вручную скопировать все размеры, переменные и атрибуты файла NetCDF в новый файл. Как и в случае копировать файл netcdf с помощью python, это работает хорошо, за исключением таких параметров хранения, как ' fill_value» или «размеры блоков». В 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 я могу установить эти параметры для новую переменную, но как я могу получить такие параметры, как «fill_value» или «chunksizes» из существующего файла с помощью модуля netcdf4-python? Каков синтаксис для чтения этих параметров?


person Ludwig    schedule 29.10.2020    source источник


Ответы (2)


Для получения информации о размерах фрагментов вы можете использовать метод 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.

person DopplerShift    schedule 30.10.2020

Спасибо, это работает как шарм! Я решил обработку неопределенного _FillValue теперь, например:

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

Выглядит немного сложно, но кажется, что dtype не имеет метода формата вывода для ожидаемого ввода для default_fillvals

person Ludwig    schedule 30.10.2020