ArcPy Loop – Using for Loop to Execute Query in ArcPy

arcpylooppythonselect-by-attribute

I'm trying to provide the breakdown of fire detection for an area by sorting of confidence levels. The dataset has 12 files (one for each month in a year) with fire records which all have a column called "confidence" with a value between 0 and 100. I have to use a for loop to query the files by 3 different confidence levels.
Group 1: >85% confidence
Group 2: 60-85% confidence
Group 3: <60% confidence

I HAVE TO USE a for loop to execute this. Any ideas? I started by appending all the files into one list. I'm told that I could use lists to set up lower and upper ranges and SelectLayerByAttribute_management, and use that in a loop, but don't know how to do that.

This is my final code that works. I decided to merge the files together into one big file.

arcpy.env.workspace = "***********/data/" 

list1 = []; 

for month in range(1,13): 
    inf = "2007" + str(month).zfill(2)+ "_rfe" 
    arcpy.DefineProjection_management(newpath + inf + ".shp", 4326)
    list1.append(newpath + inf + ".shp") 

out1 = "big2007" + "_rfe" + ".shp" 
layer1 = "layer1" + ".shp" 
arcpy.Merge_management(list1,out1)  
arcpy.MakeFeatureLayer_management(out1, layer1)

lower = [0, 60, 86] 
upper = [60, 86, 101] 

for i in range(len(lower)):
    arcpy.SelectLayerByAttribute_management(layer1, "NEW_SELECTION", """ "CONF" >= {} and "CONF" < {}""".format(lower[i],upper[i])) 
    result = arcpy.GetCount_management(layer1).getOutput(0) 
    result = int(round(result)) 

Best Answer

I assume that your files are in the same directory. I don't know why you Have to use a for loop, as it adds unnecessary complexity, but here is an example where you can create two lists (one with the lower ranges and the second with the upper ranges), that you insert into the where clause when creating the layer (you can also create a single layer without where clause, and use the same where clause to select by attribute within this layer)

minvals = [85, 60 , -1  ]
maxvals = [100, 85, 60]

fcs = arcpy.ListFeatureClasses()
for fc in fcs:
    for i in range(len(minvals)):
        arcpy.MakeFeatureLayer(fc, fc[:-4]+str(i+1), """ "confidence_field_name" > {} And "confidence_field_name" <= {}""".format(minvals[i],maxvals[i]) )
Related Question