16

実際に多くの属性と変数を含むnetcdfファイル内の単一の変数を処理する必要があります。NetCDFファイルを更新することはできないと思います(Scientific.IO.NetCDF.NetCDFFileの変数を削除する方法についての質問を参照してください) 。

私のアプローチは次のとおりです。

  1. 元のファイルから処理する変数を取得します
  2. 変数を処理する
  3. 元のnetcdfからすべてのデータをコピーしますが、処理された変数を最終ファイルにコピーします
  4. 処理された変数を最終ファイルにコピーします

私の問題は、ステップ3をコーディングすることです。私は次のことから始めました。

def  processing(infile, variable, outfile):
        data = fileH.variables[variable][:]

        # do processing on data...

        # and now save the result
        fileH = NetCDFFile(infile, mode="r")
        outfile = NetCDFFile(outfile, mode='w')
        # build a list of variables without the processed variable
        listOfVariables = list( itertools.ifilter( lamdba x:x!=variable , fileH.variables.keys() ) )
        for ivar in listOfVariables:
             # here I need to write each variable and each attribute

データの構造全体を再構築せずに、すべてのデータと属性を一握りのコードで保存するにはどうすればよいですか?

4

5 に答える 5

3

C netCDF バージョン 4.3.0 以降の nccopy ユーティリティには、コピーする変数を (属性とともに) リストするオプションが含まれています。残念ながら、必要な変数を除外するオプションは含まれていません。

ただし、含める (カンマ区切りの) 変数のリストによって nccopy コマンドラインがシステムの制限を超えない場合、これは機能します。このオプションには 2 つのバリエーションがあります。

nccopy -v var1,var2,...,varn input.nc output.nc
nccopy -V var1,var2,...,varn input.nc output.nc

最初の (-v) には、すべての変数定義が含まれますが、名前付き変数のデータのみが含まれます。2 番目の (-V) には、名前のない変数の定義またはデータは含まれません。

于 2013-04-16T21:50:04.667 に答える
0

これは古い質問であることは承知していますが、代わりに、ライブラリnetcdfshutilを使用できます。

import shutil
from netcdf import netcdf as nc

def processing(infile, variable, outfile):
    shutil.copyfile(infile, outfile)
    with nc.loader(infile) as in_root, nc.loader(outfile) as out_root:
        data = nc.getvar(in_root, variable)
        # do your processing with data and save them as memory "values"...
        values = data[:] * 3
        new_var = nc.getvar(out_root, variable, source=data)
        new_var[:] = values
于 2015-08-15T22:26:31.903 に答える