python создает NetCDF с атрибутами

#python #xml #netcdf

#python #xml #netcdf

Вопрос:

У меня есть XML-файл, который я хочу использовать в качестве основы для файла NetCDF. Я согласен с чтением XML-файла и созданием файла NetCDF, как на Python.

Каждая группа или переменная в файле XML имеет атрибуты, и я хочу добавить их в файл NetCDF. Моя проблема в том, что я не знаю имен атрибутов, и все это должно быть автоматическим.

Обычный способ создания и добавления атрибута в python для NetCDF был бы таким:

 grp.attr = 'name'
  

Теперь мне нужно сделать это автоматически, я не знаю, что такое «attr» на самом деле. Если я использую ‘attr’ в качестве имени переменной, ‘attr’ будет добавлен в файл NetCDF, а не фактическое имя.

Я попытаюсь проиллюстрировать это. Допустим, у меня есть три атрибута для моей группы, которые называются:

 <attribute name="alphabet" value="abc"/>
<attribute name="number" value="42"/>
<attribute name="version" value="ncc1701"/>
  

Я хочу, чтобы эти атрибуты были в файле, но на момент написания у меня нет представления о том, где какой атрибут будет, каково его имя и т.д. Итак, я перебираю все атрибуты и написал бы код, подобный этому:

 for att in list_attributes:
  attr_name = att.name
  attr_value = att.value
  grp.attr_name = attr_value
  

Если я сделаю это, я получу один атрибут в моем файле NetCDF с именем ‘attr_name’ и значением ‘ncc1701’ вместо предполагаемых трех атрибутов.

Есть идеи, как это решить? Спасибо.

Комментарии:

1. Используете ли вы пакет netCDF4?

2. @C.Dlp, да, я использую пакет netCDF4 для python.

3. Если вы создадите новую переменную NetCDF для каждого атрибута в вашем цикле, обычно это будет работать

4. @C.Dlp не могли бы вы, возможно, объяснить это более подробно? Вы имеете в виду создать переменную вместо атрибута? Спасибо

5. Да, вы можете реализовать что-то подобное : для att в list_att: evar = ncfile.createVariable(name, vtype, dim, fill_value=_FillValue) evar[:] = att.value

Ответ №1:

Используйте setncattr метод из пакета netCDF4 в цикле.

Комментарии:

1. возможно, есть недостаток, потому что можно улучшить использование setncattr метода экземпляров Dataset / Group / Variable пакета netCDF4. Он аналогичен Python setattr , плюс есть также возможность создавать множество атрибутов с помощью setncatts