2016-07-06 14 views
2

follの-999.0の値をすべて置き換えたいと思います。 netCDFファイルを0.0で区切ります。ファイルはここにある: https://www.dropbox.com/s/ohh7tntzm2pj1uw/all_SSP3_BaU_NoCC.nc?dl=0pythonを使ってnetCDFファイルの値を置き換えてください

ここに私の機能です:

def modify_nc_value(path_inp, name_var, val_to_modify, new_value): 
    """ 
    Replace value in netCDF vriable from val_to_modify to new_value 
    Args: 
     path_inp: 
     name_var: Name of variable for which to modify value, if -1, then change all variables 
     val_to_modify: 
     new_value: 

    Returns: 

    """ 
    hndl_inp = netCDF4.Dataset(path_inp, 'r+') 

    if name_var == -1: 
     for var, varin in hndl_inp.variables.iteritems(): 
      hndl_inp[var][:][hndl_inp[var][:] == val_to_modify] = new_value 
    else: 
     hndl_inp[name_var][:][hndl_inp[name_var][:] == val_to_modify] = new_value 

    hndl_inp.close() # Write variable back to disk 

しかし、機能が動作するようには思えません。 -999.0の値は置き換えられません。これを修正するには?

+0

変数は常に1Dですか?私はそうは思わないが、あなたのコードは常に1Dになるように 'var 'を割り当てます。つまり' [var] [:] 'です。 – N1B4

+0

変数は3Dです – user308827

+0

http://unidata.github.io/netcdf4-python/#netCDF4.Dataset.syncに記載されているように同期する必要はありませんか? –

答えて

1

ファイルを追加モード(r+)で開くと、新しい値の追加のみが許可されます。データセットが急速に大きくなるため、実際には読み書きモードはありません。

  • は、データセットを読んで、新しいファイルを開く(モードがクロバーがTrueで、wある)、修正してそれに書き込み元のデータセットの上に戻ってそれをコピー:あなたは2つのオプションがあります。

  • > 5Tを超えるデータセットが大きい場合は、代わりにコードを変更して-999.0の値を探します。

  • これを行う方法があるかもしれません。私はthese hintsを作ったことはありませんが、運が良ければよいかもしれません。

幸運を祈る!それを機能させるには、これらの答えに追加します。

関連する問題