2016-06-01 40 views
1

我有多個包含澳大利亞每日降雨量值的NetCDF文件(每年一個)。根據Python中的日期值從多個NetCDF文件中提取柵格

目前我可以通過從包含我想要的日期列表的.csv文件中讀取來提取特定的日期。然後,它將每天輸出爲一個光柵文件。

但是,我目前的腳本只允許我一次做這一年。我對python相當陌生,而不是通過更改它讀取的NetCDF文件(以及.csv文件中的日期列表)來多次重新運行腳本,我希望在創建一個文件時獲得一些幫助循環將讀取NetCDF的列表。

我知道像NetCDF4這樣的模塊可以將所有文件視爲一個文件,但儘管讀了其他人已經完成了很多小時,但我並不聰明。

這是我到目前爲止有:

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.1900.nc通過命名來pre.2011.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,) 

,然後用這個nc_name作爲filepathargument在arcpy.MakeNetCDFRasterLayer_md通話

另一種可能性是作爲建議在評論中質疑代碼如下:

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

然後致電arcpy.MakeNetCDFRasterLayer_md

+0

謝謝Dilettant ...我嘗試了你的第一個建議,但它提出了一個錯誤,說「AttributeError:'模塊'對象沒有屬性'參數'」然後我試着把你的第二個建議放在範圍內......等等」。雖然它看起來有效,但當我檢查這些文件時,它們只是一年的正確柵格。我是從1979年到1981年的NetCDF樣本做的,只有1980年的柵格數據是正確的。 – CallumRT

+0

Polyglot導致巴比倫 - 對不起,它是sys.argv這是一個列表,當你用say參數2011調用你的prpgram時,那麼這個列表將有兩個條目:位置0和2011的程序名稱爲位置1的字符串。所以sys.argv [1]將是'2011' – Dilettant

+1

我是從1979年到1981年的NetCDF樣本做的,在.csv文件中每年有兩個日期,而從1980年開始只有光柵是正確的。 因爲我需要儘快進行後續分析,所以我找到了一種解決方法,將所有年份的所有日期分別提取到單個文件夾中,並使用「arcpy.CopyRaster_management」將一個文件夾中所需的柵格/日期複製到另一個文件夾中「 如果對其他人有幫助,我會繼續嘗試提供的任何建議。如果沒有,我已經找到了解決所有NetCDF的方法。 – CallumRT

相關問題