#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. Он аналогичен Pythonsetattr
, плюс есть также возможность создавать множество атрибутов с помощьюsetncatts