pythonでnetcdfから変数を取得した後で、nc_closeをすると、その変数を扱えなくなる。
具体例として、
main: var = read_NC(infile,"U")
あるNetCDFファイルを読み、変数を取得し、その配列を返す函数を定義している。
ダメな例
def read_NC(infile,varname): nc = netCDF4.Dataset(infile,"r") nc.set_auto_mask(False) var = nc.variables[varname] nc.close() return var
上の例では、nc.closeをした瞬間に、varも読取が不可能となる。
varはnetCDFのオブジェクトなので、closeしてしまうと、そのファイルから読んだすべての情報で
netCDF由来のオブジェクトは扱うことができない。だからといって、closeしないと大量のファイルをループで
扱う場合にメモリ不足で実行できなくなる。そこで、読み込んだあとに、netcdf由来のオブジェクトから、普通のリストに
変更してあげる必要がある。下がその例です。
上手くいく例
def read_NC(infile,varname): nc = netCDF4.Dataset(infile,"r") nc.set_auto_mask(False) var = nc.variables[varname] var2 = var[:] nc.close() return var2
スライジングを使って、netcdf由来のオブジェクトではなくしたことで、nc.closeによる影響を受けない。
ただし、netcdfのオブジェクトではないので、様々な情報(unit, long_nameなど)も得ることができなくなる。