![](/img/trans.png)
[英]Python netCDF4 - adding a new variable to existing file with change in shape
[英]Read netcdf4 variable attributes and write them to variables of new file
我有一个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是unit , comment和minimum_significant_digit ,并且对于三个变量而言是不同的。 但是上述方法不起作用,尽管文件是用数据创建的,但属性没有被复制,因此不存在。
据我所知,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
参数是属性应该附加到的数据集或变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.