nc.variables [i] .units показывает ошибку при извлечении данных из файла netcdf - PullRequest
0 голосов
/ 13 июня 2019

nc.variables[i].units показывает ошибку attribute not found.я пытаюсь извлечь данные из файла netcdf.как извлечь данные определенной долготы или широты?

from netCDF4 import Dataset

nc=Dataset("test.nc",'r')

for i in nc.variables:

    print(i,nc.variables[i].units,nc.variables[i].shape) 

lat=nc.variables['lat'][:]
print(lat)

вывод выглядит следующим образом:

area meter2 (128, 256)
lat degrees_north (128,)
Traceback (most recent call last):
File "C:\Users\harsh\Desktop\cv\test_netcdf.py", line 7, in <module>
print(i,nc.variables[i].units,nc.variables[i].shape) #nc.variable[i].units
File "netCDF4\_netCDF4.pyx", line 4303, in 
netCDF4._netCDF4.Variable.__getattr__
File "netCDF4\_netCDF4.pyx", line 4114, in 
netCDF4._netCDF4.Variable.getncattr
File "netCDF4\_netCDF4.pyx", line 1392, in netCDF4._netCDF4._get_att
File "netCDF4\_netCDF4.pyx", line 1857, in 
netCDF4._netCDF4._ensure_nc_success
AttributeError: NetCDF: Attribute not found

1 Ответ

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

. Внимательно посмотрите на этот раздел.

for i in nc.variables:

    print(i,nc.variables[i].units,nc.variables[i].shape) 

В этом цикле for я не целое число.Поскольку это оценивается как a для каждого цикла, оно представляет текущую переменную, а не индекс, в котором существует эта переменная.У вас есть несколько вариантов здесь

Вариант один: вместо этого используйте диапазон

for i in range(len(nc.variables)):

    print(i,nc.variables[i].units,nc.variables[i].shape) 

Вариант два: используйте zip для ссылки на переменную и целое число
Как указано вБарт, Enumerate - лучший способ сделать это.См. Его комментарий ниже для этого

for i, variable in zip(range(len(nc.variables)), nc.variables):

    print(i, variable.units, variable.shape) 

Вариант третий: вообще не используйте i

for variable in nc.variables:

    print(variable.units, variable.shape) 
...