如何更新netCDF文件的一部分?

时间:2017-08-02 02:57:07

标签: python numpy netcdf

我有包含1500行和2000列的netCDF文件。其中很少包含不同位置的数据不一致。我想用NoData值更新这种不一致。在研究的过程中,我发现许多答案,其中一个人希望更新高于/低于某个阈值的变量值。例如:

#------ Research-----

dset['var'][:][dset['var'][:] < 0] = -1

#-----------------

Python : Replacing Values in netcdf file using netCDF4

由于不一致的值与数据值匹配,因此无法根据低于/高于某个阈值更新不一致。

我的方法1:

ncfile   =   r'C:\\abcd\\55618_12.nc'
variableName =  'MAX'   

fh = Dataset(ncfile, mode='r+')

for i in range(500,600,1):
    for j in range(200,300,1):
        fh.variables[variableName][i][j] = -99900.0 # NoData value
        #--- or 
        #fh.variables[variableName][i:j] = -99900.0

fh.close()

方法2:

fh = Dataset(ncfile, mode='r')
val = fh.variables[variableName]

for i in range(500,600,1):
    for j in range(200,300,1):
        val[i][j] = -99900.0

fh = Dataset(ncfile, mode='w') #(ncfile, mode='a')(ncfile, mode='r+')
fh.variables[variableName] = val
fh.close()

结果: 脚本成功完成处理。但是,不要更新.nc文件。

朋友们,非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

以下方法对我有用:

var likes = [[String:Any]]()
init(cake: [String: Any]?) {
  guard let likes = cake?["likes"] as? [String:Any],
   let data = likes["data"] as? [[String:Any]] else {return}
       self.likes = data
}

答案 1 :(得分:1)

数据是在lat / lon网格上吗?如果是这样,使用cdo从命令行执行它可能更容易:

cdo setclonlatbox,FillValue,lon1,lon2,lat1,lat2  infile.nc outfile.nc

其中FillValue是您缺失的值,在您的情况下似乎是-99900.0。