Have you tried right-clicking the tool and choose the 'Batch' option?
import arcpy as ap
import glob
# this will give you a Python list object that you can use to batch process all of your files
# just insert the path to your folder holding the netCDF files
cdfList = glob.glob('C:\\examplefolder\\*.nc')
# now you can loop through your list and process each file one at a time
for cdf in cdfList:
print "Now processing: " + cdf
ap.md.MakeNetCDFRasterLayer(cdf, [fill in the other variables here])
print "Done!"# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *
# Input data source
arcpy.env.workspace = "S:/PM_data/Climate_Idaho/Raw/pr"
arcpy.env.overwriteOutput = True
# Set output folder
OutputFolder = "S:/PM_data/Climate_Idaho/Output/pr_raster"
# Loop through a list of files in the workspace
NCfiles = arcpy.ListFiles("*.nc")
for filename in NCfiles:
print("Processing: " + filename)
inNCfiles = arcpy.env.workspace + "/" + filename
fileroot = filename[0:(len(filename)-3)]
TempLayerFile = "precipitation_amount"
outRaster = OutputFolder + "/" + fileroot
# Process: Make NetCDF Raster Layer
arcpy.MakeNetCDFRasterLayer_md(inNCfiles, "precipitation_amount", "lon", "lat", TempLayerFile, "", "", "BY_VALUE")
# Process: Copy Raster
arcpy.CopyRaster_management(TempLayerFile, outRaster + ".tif", "", "", "", "NONE", "NONE", "")
print "***DONE!!!"
print arcpy.GetMessages()
This is my code. I got it to loop through every file in a folder. The problem is that it only reads the first value. I haven't figured out how to loop through each individual value in the netCDF file yet. I have been trying to modify the code from this forum: http://forums.arcgis.com/threads/32361-using-arcpy-to-export-separate-netcdf-dimension-values-as-a-r... so it reads individual value.# Import system modules import arcpy from arcpy import env from arcpy.sa import * # Input data source arcpy.env.workspace = "S:/PM_data/Climate_Idaho/Raw/pr" arcpy.env.overwriteOutput = True # Set output folder OutputFolder = "S:/PM_data/Climate_Idaho/Output/pr_raster" # Loop through a list of files in the workspace NCfiles = arcpy.ListFiles("*.nc") for filename in NCfiles: print("Processing: " + filename) inNCfiles = arcpy.env.workspace + "/" + filename fileroot = filename[0:(len(filename)-3)] TempLayerFile = "precipitation_amount" outRaster = OutputFolder + "/" + fileroot # Process: Make NetCDF Raster Layer arcpy.MakeNetCDFRasterLayer_md(inNCfiles, "precipitation_amount", "lon", "lat", TempLayerFile, "", "", "BY_VALUE") # Process: Copy Raster arcpy.CopyRaster_management(TempLayerFile, outRaster + ".tif", "", "", "", "NONE", "NONE", "") print "***DONE!!!" print arcpy.GetMessages()
# this will convert the FIRST time step in your netCDF file to a raster layer arcpy.MakeNetCDFRasterLayer_md(inNCfiles, "precipitation_amount", "lon", "lat", TempLayerFile1, "#", "TIME 0", "BY_INDEX") # this will convert the SECOND time step in your netCDF file to a raster layer arcpy.MakeNetCDFRasterLayer_md(inNCfiles, "precipitation_amount", "lon", "lat", TempLayerFile2, "#", "TIME 1", "BY_INDEX") # this will convert the THIRD time step in your netCDF file to a raster layer arcpy.MakeNetCDFRasterLayer_md(inNCfiles, "precipitation_amount", "lon", "lat", TempLayerFile3, "#", "TIME 2", "BY_INDEX") #and so on...
This type of task is very common in GIS work and, fortunately, requires only a very simple script. Your first step should be to read the documentation and make sure you understand what information you need to run the MakeNetCDFRasterLayer tool. Then start with this:import arcpy as ap import glob # this will give you a Python list object that you can use to batch process all of your files # just insert the path to your folder holding the netCDF files cdfList = glob.glob('C:\\examplefolder\\*.nc') # now you can loop through your list and process each file one at a time for cdf in cdfList: print "Now processing: " + cdf ap.md.MakeNetCDFRasterLayer(cdf, [fill in the other variables here]) print "Done!"
Note that this is only the start of the script. For example, you'll need to make sure each output raster is given a unique, meaningful name. But we should leave some of the fun stuff for you. 🙂
Thank you! I meant to write earlier that this script idea worked like a charm. I used an inner loop with Select by Dimension to evaluate each month in each netcdf file. I noticed you had a different method elsewhere in this thread. I'll try that next time.
Thanks again,
Pam
PS - I can't find the 'green checkmark' that is supposed to indicate this answered my question so I'll just say, "This answered my question!".
#Make a separate raster *.img file for each dimension value (time) in a netcdf file
import arcpy, os, time, datetime, calendar
from arcpy import env
from arcpy.sa import *
# Input data source
#########Change folder
arcpy.env.workspace = "S:/PM_data/Climate_Idaho/Raw/tmmx" # Change folder++
#########
arcpy.env.overwriteOutput = True
arcpy.env.scratchWorkspace = "S:/Work/Risa/Trials_Errors/ScratchWorkSpace"
# Loop through a list of files in the workspace
NetCDFfiles = arcpy.ListFiles("*.nc")
for filename in NetCDFfiles:
print("Processing: " + filename)
# Set local variables
inNetCDF = arcpy.env.workspace + "/" + filename
#########Change the variable
variable = "air_temperature"
#########
XDimension = "lon"
YDimension = "lat"
bandDimension = ""
dimensionValues = "day "
valueSelectionMethod = "BY_VALUE"
#########Change the variable ###
InMemory_netcdf_raster = "air_temperature"
#########
#########Change folder
outRasterFolder = "S:/PM_data/Climate_Idaho/Output/tmmx_raster"
#########
#Global Attribute:
#ncFP = arcpy.NetCDFFileProperties(inNetCDF)
#ncDim = ncFP.getDimensions()
#Get Global Attribues
#ncAttributeNames = ncFP.getAttributeNames("")
#for ncAttributeName in ncAttributeNames:
#print " "
#print "Attribute Name: %s " % ncAttributeName
#print ncFP.getAttributeValue("", ncAttributeName)
#print " "
#Year info
#######change the lengths
fileroot = filename[5:(len(filename)-3)] #change the name lengths too
#######
Yr = int(fileroot)
print "Processing --> " + str(Yr)
#Month info
allmnths = range(1,13)
for mnths in allmnths:
Lastday = calendar.monthrange(Yr, mnths)[1]
MRange = range(1,Lastday+1)
for dyy in MRange:
dyys =int(dyy)
mnthsss = int(mnths)
a = str(mnthsss)+ "/" + str(dyys) +"/" + str(Yr)
#IF Days or Months less than 10, we want to put zero at the front so it is easier to sort.
if mnthsss < 10:
b = str(Yr)+ "_" + "0" + str(mnthsss)+ "_" + "0" + str(dyys)
else:
b = str(Yr)+ "_" + str(mnthsss)+ "_" + str(dyys)
if dyys < 10:
b = str(Yr)+ "_" + "0" + str(mnthsss)+ "_" + "0" + str(dyys)
else:
b = str(Yr)+ "_" + "0" + str(mnthsss)+ "_" + str(dyys)
############## ####### ####### ####### ####### ####### ####### #######
#the OUTPUT has zero in front of October, Nov, and DEc (month value >10)
#NEED TO FIX THIS ***
############## ####### ####### ####### ####### ####### ####### #######
dimensionValues = "day " + a
##########CHANGE the word too##
#################
outTIFF = outRasterFolder + "/" + "tmmx_" + b + ".tif"
#################
# Execute MakeNetCDFRasterLayer
arcpy.MakeNetCDFRasterLayer_md(inNetCDF, variable, XDimension, YDimension, InMemory_netcdf_raster, bandDimension, dimensionValues, valueSelectionMethod)
#print "Created NetCDF Layer for " + a
# Process: Copy Raster
arcpy.CopyRaster_management(InMemory_netcdf_raster, outTIFF, "", "", "", "NONE", "NONE", "")
print "Created Raster for _tmmx_" + b
#################
print "\nEnd of processing ... YAHOO!!!"