场景:发现nc文件中某个变量的数值存在问题,修改在源文件基础上修改。
注意事项:
- 注意nc文件中,变量和属性的区别。可以单独修改变量,也可单独修改某一个变量的属性;
- 修改之后的变量的形状(维度)不能变,否则需要修改维度信息;
- 修改之后的变量的属性仍是原来的信息,若也要修改,则需针对属性进行修改;
(1)修改nc文件中的 “time” 变量为例
% read original nc file
DirPath = '\Wind';
inFileList = dir([DirPath, '\*.nc']); % 读取整个文件夹下的列表,存入结构体
for i = 1:468
FileName = [DirPath, '\', inFileList(i).name]; % 路径+文件名,读取具体文件
StrYear = inFileList(i).name(end-9:end-6); % 读取日期,如“2010”,类型为字符串
StrMonth = inFileList(i).name(end-4:end-3); % 读取日期,如“08”,类型为字符串
iM = int32(str2num(StrMonth)); % 转换为数字类型
ncid = netcdf.open(FileName, 'WRITE'); % 以“read-wirte”方式打开nc
timeid = netcdf.inqVarID(ncid, 'time'); % 读变量id
time_org = netcdf.getVar(ncid, timeid); % 获取变量
MonthDays = [31 28 31 30 31 30 31 31 30 31 30 31];
deltaT = 1;
firstT = 0.5*deltaT/24;
lastT = MonthDays(iM) - 0.5*deltaT/24;
timeN = MonthDays(iM) * 24/deltaT;
time = single(linspace(firstT, lastT, timeN));
time = time';
netcdf.putVar(ncid, timeid, time); % 写入新变量
netcdf.close(ncid); % 关闭nc文件
end
【提醒】 为提高效率,若循环内未牵涉到不同步长之间的计算,可以使用 parfor 来提升效率。
(2)修改nc文件中的 “ET” 变量的“long_name”属性的值
ncid = netcdf.open('ncfile.nc','write'); % 以写的方式打开nc文件
varid = netcdf.inqVarID(ncid, 'ET') % 获取变量的ID
netcdf.reDef(ncid) % 开启重定义模式
netcdf.putAtt(ncid, varid, 'long_name','Latent Heat Flux') % 重新放属性内容
netcdf.close(ncid) % 最后,关闭nc文件
相关参考:可结合matlab帮助详细学习