Добавить переменную в существующий файл netcdf4 в Python - PullRequest
0 голосов
/ 26 июня 2019

У меня есть спутниковое изображение MODIS в формате netcdf. Я использовал определенные переменные из этого изображения в качестве входных данных в модель, создавая массив NumPy с именем npp. Этот массив имеет те же размеры, что и широта и долгота исходного файла (888,1368). Я хотел бы добавить npp в качестве новой переменной в исходный файл, но мне неясно, что я делаю неправильно?

import netCDF4 as nc
from netCDF4 import Dataset

# Load input file 
file_input = nc.Dataset('A2018066.5d.L3m_OC.nc', 'w', format='NETCDF4')
# view dimensions 
print(file_input.dimensions)

"OrderedDict([('lat', <class 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 888
), ('lon', <class 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1368
), ('rgb', <class 'netCDF4._netCDF4.Dimension'>: name = 'rgb', size = 3
), ('eightbitcolor', <class 'netCDF4._netCDF4.Dimension'>: name = 'eightbitcolor', size = 256
)])"

# input file variables.keys
print(file_input.variables.keys())

"odict_keys(['aot_869', 'angstrom', 'Rrs_412', 'Rrs_443', 'Rrs_469', 'Rrs_488', 'Rrs_531', 'Rrs_547', 'Rrs_555', 'Rrs_645', 'Rrs_667', 'Rrs_678', 'chlor_a', 'chl_ocx', 'Kd_490', 'pic', 'poc', 'ipar', 'nflh', 'par', 'lat', 'lon', 'palette'])"

# add npp to input file 
file_input.createDimension('latitude',888)
file_input.createDimension('longitude', 1368)

nppvariable = file_input.createVariable('npp', 'int16',('latitude', 'longitude'))
nppvariable[:] = npp[:,:]

Но это, кажется, переписывает все существующие переменные, теряя все остальные данные?

file_input.variables.keys()

"odict_keys(['npp'])```

Извиняюсь, это мой первый раз при работе с netcdf4 в python, но почему я теряю все остальные переменные, когда использую createvariable() вместо npp, добавляемого в качестве новой переменной в исходный файл? Я пропускаю шаг?

1 Ответ

1 голос
/ 26 июня 2019

Режим записи w действительно перезапишет ваш существующий файл NetCDF, создав вместо него совершенно новый.

Вы ищете режим добавления, a или r+:

file_input = nc.Dataset('A2018066.5d.L3m_OC.nc', 'r+', format='NETCDF4')

https://unidata.github.io/netcdf4-python/netCDF4/index.html#netCDF4.Dataset

режим доступа. r означает только чтение; данные не могут быть изменены. w означает запись; создается новый файл, существующий файл с тем же именем удаляется. a и r+ означают добавление (по аналогии с последовательными файлами); существующий файл открывается для чтения и записи.

...