基于Python中的日期值从多个NetCDF文件中提取栅格

时间:2016-06-01 09:54:47

标签: python raster netcdf

我有多个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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

如果问题实际上是关于python命令行参数,你可以添加如下内容:

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

然后在nc_name调用中使用此arcpy.MakeNetCDFRasterLayer_md作为filepathargument

另一种可能性是如评论中所建议的那样对硬编码提出另类问题:

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

然后拨打arcpy.MakeNetCDFRasterLayer_md