使用Xarray为现有NetCDF文件添加全局属性失败求助
问题原因与解决方案
你的代码核心问题出在ds = ds.attrs.update(metadata)这一行:
ds.attrs.update(metadata)是原地修改数据集的属性字典,这个方法的返回值是None- 你把
ds重新赋值为None,导致当上下文管理器(with块)退出时,没有将修改后的属性写入文件
修正后的代码方案
方案1:直接原地更新属性(推荐)
去掉赋值操作,直接调用update方法,上下文管理器会在退出时自动保存修改:
metadata = {'title': 'Time-series data of currents, temperature and waves off Lahaina, Maui, 2023', 'institution':'U.S. Geological Survey'} for file in filelist: with xr.open_dataset(file, mode='a') as ds: ds.attrs.update(metadata) # 原地修改属性,不重新赋值ds
方案2:使用assign_attrs生成新数据集并保存
如果需要更清晰的链式操作,可以用assign_attrs,它会返回带有新属性的数据集,需要显式写入:
metadata = {'title': 'Time-series data of currents, temperature and waves off Lahaina, Maui, 2023', 'institution':'U.S. Geological Survey'} for file in filelist: with xr.open_dataset(file, mode='a') as ds: ds = ds.assign_attrs(**metadata) ds.to_netcdf(mode='a') # 显式写入修改
修正后重新运行代码,再用Panoply打开文件就能看到新增的全局属性了。
内容的提问来源于stack exchange,提问作者Kurt
相关产品推荐
相关产品推荐

