我有一个netcdf4文件 input.nc4 ,其中包含变量 alpha , beta , gamma 。我想创建一个新的netcdf4文件 output.nc4 ,其变量名称为 alpha_new , beta_new , gamma_new 。 alpha_new , beta_new 和 gamma_new 的属性应为 alpha , beta 和 gamma 分别(循环),数据只是一个numpy数组。我正在尝试以下操作,但不知道我在做什么错,或者这样做是否正确?
import sys
import numpy as np
from netCDF4 import Dataset
input = Dataset('input.nc4', 'r')
output = Dataset('output.nc4', 'w', format='NETCDF4')
dict1 = {}
for name, variable in input.variables.items():
dict1[name] = variable
this = sys.modules[__name__]
for var_name,var_data in dict1.items():
file.createDimension(var_name,30)
var_output = output.createVariable('/Group_1/{}'.format(var_name), float, ('{}'.format(var_name),))
var_nc[:] = np.linspace(1,30,30)
setattr(this, '{}_new'.format(var_name) , var_nc[:])
for attr_name in var_data.ncattrs():
setattr(this,'vv{}.{}'.format(var_name,attr_name), getattr(var_data,attr_name))
output.close()
其中attr_name是单位,注释和最低有效位数,并且对于三个变量而言是不同的。但是上述方法不起作用,尽管该文件是用数据创建的,但属性没有被复制,因此不存在。
答案 0 :(得分:0)
据我所知,setattr仅设置现有的netCDF4属性,它创建的任何属性都将附加到python实例(不在数据集/文件内部)。相反,您需要创建一个新属性。如果没有直接创建属性的方法,则可以使用一种变通方法,通过直接设置属性然后重命名来创建任意命名的属性。
def set_or_create_attr(var, attr_name, attr_value):
if attr_name in var.ncattrs():
var.setncattr(attr_name, attr_value)
return
var.UnusedNameAttribute = attr_value
var.renameAttribute("UnusedNameAttribute", attr_name)
return
使用该函数代替setattr
应该可以解决问题,var
参数是属性应该附加到的数据集或变量。