2016-06-01 15 views
1

オーストラリアの毎日の降雨値を含む複数のNetCDFファイル(毎年1つ)があります。Pythonの日付値に基づいて複数のNetCDFファイルからラスタを抽出する

現在、私が望む特定の日付を、.csvファイルから読み込み、必要な日付のリストを含むものを抽出することができます。これから、毎日ラスタファイルとして出力します。

しかし、現時点でのスクリプトでは、一度に1年だけこれを行うことができます。私はかなりPythonには新しく、NetCDFファイル(.csvファイルの日付のリストと同様)を変更することで何度もスクリプトを再実行するのではなく、作成するのに役立つことを期待していました。 NetCDFのリストを読むループ。

NetCDF4などのモジュールはすべてのファイルを1つのファイルとして扱うことができると理解していますが、何時間も他の人が行ったことを読んでいても私は賢明ではありません。ここで

は、私がこれまで持っているものです。

import os, sys 
import arcpy 

# Check out any necessary licenses 
arcpy.CheckOutExtension("spatial") 
arcpy.env.overwriteOutput = True 

# Script arguments 
netCDF = "G:\\Gridded_rain\\DAILY\\netcdf\\Daily_analysis_V3" 
rainfall = "G:\\output_test\\r_" 

arcpy.env.workspace = netCDF 

# Read Date from csv file 
eveDate = open ("G:\\selectdate_TEST1.csv", "r") 
headerLine = eveDate.readline() 
valueList = headerLine.split(",") 
dateValueIndex = valueList.index("Date") 
eventList = [] 
for line in eveDate.readlines(): 
    segmenLine = line.split(",") 
    variable = "pre" 
    x_dimension = "lon" 
    y_dimension = "lat" 
    band_dimension = "" 
    #dimensionValues = "r_time 1900025" 

    valueSelectionMethod = "BY_VALUE" 
    outFile = "Pre" 
    # extract dimensionValues from csv file 
    arcpy.MakeNetCDFRasterLayer_md("pre.2011.nc", variable, x_dimension, y_dimension, outFile, band_dimension, segmenLine[dateValueIndex], valueSelectionMethod) 
    print "layer done" 
    #copy and save as raster tif file 
    arcpy.CopyRaster_management(outFile, rainfall + segmenLine[dateValueIndex] + ".tif" , "", "", "", "NONE", "NONE", "") 
    print "raster done" 

のNetCDFファイルはすべてのヘルプをいただければ幸いです

pre.2011.ncしてpre.1900.ncから命名されています!

+0

「dateValueIndex」のフォーマットとは何ですか?そしていくつかの値を掲示する。 – Serenity

+0

現在の質問文から推測すると、引数を扱い、これをハードコードされたリテラル 'pre.2011.nc'の代わりに変数として使用して、一致するnetcdfファイルにアクセスするか、別のループレベル(外側) (1900年、2012年): 'のような形をしていて、ファイルを消化します。未解決の質問:パラメータファイルも一致させる必要がありますか?私はそれに基づいてサンプルを与えるでしょうか? – Dilettant

答えて

1

質問はpythonのコマンドライン引数について実際にある場合は、のようなものを追加することもできます。

import sys 
year = int(sys.argv[1]) 
nc_name = 'pre.%d.nc' % (year,) 

をしてから

は、他の可能性が示唆したようになり、あなたのarcpy.MakeNetCDFRasterLayer_mdコールにfilepathargumentとしてこのnc_nameを使用しますハードコードに別のレイヤーを質問するコメントでは、次のようになります。

for year in range(1900, 2012): 
    nc_name = 'pre.%d.nc' % (year,) 

arcpy.MakeNetCDFRasterLayer_mdなど

+0

ありがとうDilettant ...私はあなたの最初の提案を試みましたが、 "AttributeError: 'モジュール'オブジェクトには属性 'args'がありません"というエラーが出ていました。 "そして、それが動作するように見えましたが、私がファイルをチェックしたとき、彼らは1年だけ正しいラスタでした。私は1979年から1981年のNetCDFのサンプルでこれを行い、1980年のラスタだけが正しかった。 – CallumRT

+0

Polyglotがバビロンにつながってしまいます - 申し訳ありませんが、引数2011でprpgramを呼び出すとリストであるsys.argvです。このリストには、位置0のプログラム名と位置2011の文字列の2つのエントリがあります。 sys.argv [1]は '2011'になります – Dilettant

+1

NetCDFのサンプルでは1979年から1981年にかけて、.csvファイルでは毎年2回、1980年にはラスタだけが正しいとしました。 その後の分析をできるだけ早く行う必要があったため、すべての曜日を1つのフォルダに別々に抽出し、「arcpy.CopyRaster_management」を使用して、名前に基づいて1つのフォルダから別のフォルダに必要なラスタ/ " 他の人にとって参考になる場合は、引き続き提案をお試しください。もしそうでなければ、私はすべてのNetCDFを最初から読まなければならないという方法を見つけました。 – CallumRT

関連する問題