Python向netCDF文件添加变量与维度报错求助(RuntimeError)
问题解决
错误原因
- 变量名冲突:你先定义了
numpy数组tmean,之后又试图用同一个名字创建NetCDF变量,NetCDF不允许文件中存在同名变量,同时变量名重复也会导致命名冲突。 - 语法错误:代码里
createDimension和createVariable的括号未闭合,f4作为数据类型需要用引号包裹;另外你不需要创建新的tmean维度,目标变量tmean应该复用已有的time维度。
修正后的代码
import numpy as np import netCDF4 as nc dataset = nc.Dataset("path", mode ="a") # 要添加变量的目标数据集 temp = dataset.variables["3D_array"] # 3D_array的维度为lat, lon, time,其中time是无限维度 lat = dataset.variables["latitude"][:] # 重命名计算结果,避免和后续要创建的变量名冲突 tmean_data = (temp[:] * np.cos(np.pi/180. * lat[:, np.newaxis])).mean(axis=(1,2)) # 直接使用已有的time维度创建变量,修复语法错误 tmean_var = dataset.createVariable("tmean", 'f4', dimensions=("time",)) # 将计算好的数据写入新变量 tmean_var[:] = tmean_data # 关闭数据集,确保修改写入磁盘 dataset.close()
额外注意
- 如果目标文件中原本就存在
tmean变量,需要先执行del dataset.variables["tmean"]删除旧变量,再创建新变量 - 操作完成后必须调用
dataset.close(),否则修改可能不会被保存到磁盘
内容的提问来源于stack exchange,提问作者13numpy37
相关产品推荐
相关产品推荐

