Traceback (most recent call last): File RCW\Code\ForLoop.py", line 99, in <module> GrpExpression = sum([GrpField1New+GrpField2New+GrpField3New+GrpField4New+GrpField5New]) TypeError: unsupported operand type(s) for +: 'int' and 'str'
#Create Feature Layers from Feature Classes parcelsFC = "ACUB_3mile.shp" parcelsFL = outName(parcelsFC,"_Layer") CbuffersFL = outName(CBuffersFC,"_Layer") arcpy.MakeFeatureLayer_management(parcelsFC, parcelsFL) arcpy.MakeFeatureLayer_management(CBuffersFC, CbuffersFL) TotalGrpField = "TotGrpCalc" #Temp - will be deleted TotalPBGField = "TotaBGCalc" #Temp - Will be deleted AvgGrpField= "AvgGrp0812" #Make into user input AvgPBGField= "AvgPBG0812" #Make into user input arcpy.AddField_management(CbuffersFL,TotalGrpField,"DOUBLE") print arcpy.GetMessages(),"\n" arcpy.AddField_management(CbuffersFL,TotalPBGField,"DOUBLE") print arcpy.GetMessages(),"\n" arcpy.AddField_management(CbuffersFL,AvgGrpField, "DOUBLE") print arcpy.GetMessages(),"\n" arcpy.AddField_management(CbuffersFL,AvgPBGField,"DOUBLE") print arcpy.GetMessages(),"\n" #Join All Nest Files Table to new selected buffer file. This table was preproccessed and made into a single dbf table (joined by cluster key) showing groupsize and PBG by year. #A column was created called TotalSize and Total PGB for each cluster. The total column will be used to help calculate the average group size/average pbg size for RCW clusters #whose 3-mile dispersal buffer intersect with each parcel. #This means this table will have to be updated manually every year unless written into the script. #This join is used to calculate criteria 2 and 3. #Input for a join must be a layer NestFiles="/RCW/Nest Data/Edited Nest Data/Nest_All.dbf" arcpy.AddJoin_management(CbuffersFL,"Cluster_ke",NestFiles,"Key12","KEEP_ALL") print arcpy.GetMessages(),"\n" GrpField1= "Nest_All.GrpSz08" #User selects field GrpField2= "Nest_All.GrpSz09" #User selects field GrpField3= "Nest_All.GrpSz10" #User selects field GrpField4= "Nest_All.GrpSz11" #User Selects field GrpField5= "Nest_All.GrpSz12" #User selects field GrpField1New= "!"+GrpField1+"!" GrpField2New= "!"+GrpField2+"!" GrpField3New= "!"+GrpField3+"!" GrpField4New= "!"+GrpField4+"!" GrpField5New= "!"+GrpField5+"!" GrpExpression = sum([GrpField1New+GrpField2New+GrpField3New+GrpField4New+GrpField5New]) arcpy.CalculateField_management(CbuffersFL,TotalGrpField,GrpExpression,"PYTHON") print arcpy.GetMessages()
Solved! Go to Solution.
GrpField1= "Nest_All.GrpSz08" #User selects field GrpField2= "Nest_All.GrpSz09" #User selects field GrpField3= "Nest_All.GrpSz10" #User selects field GrpField4= "Nest_All.GrpSz11" #User Selects field GrpField5= "Nest_All.GrpSz12" #User selects field GrpField1New= '!'+GrpField1+'!+' GrpField2New= '!'+GrpField2+'!+' GrpField3New= '!'+GrpField3+'!+' GrpField4New= '!'+GrpField4+'!+' GrpField5New= '!'+GrpField5+'!' GrpExpression = (GrpField1New+GrpField2New+GrpField3New+GrpField4New+GrpField5New)
#Get count of how many records are selected. This calculation is used to calculate avg group size and avg pbg size over the past five yrs. SelectedCount=int(arcpy.GetCount_management(CbuffersFL).getOutput(0)) print "\nThere are",SelectedCount, "buffers that intersect with parcel", FID #calculate the avg group size for selected groups. This avgerage will be temporarily recorded into the GrpAvg0812 Field located within CbuffersFL. #Once calculated an update cursor will be used to record this average in the selected parcels shapefile. GrpFieldJoin=CbuffersFL[:-6]+"."+TotalGrpField GrpFieldJoinNew='!'+GrpFieldJoin+'!/' GrpExpression=(GrpFieldJoinNew)/SelectedCount)
GrpExpression=(int(GrpFieldJoinNew)/SelectCount)
ValueError: invalid literal for int() with base 10: '!RCW_Cluster_2010_3miBuff.TotGrpCalc!/'
TotalGrpField = "TotGrpCalc" #Temp - will be deleted TotalPBGField = "TotaBGCalc" #Temp - Will be deleted AvgGrpField= "AvgGrp0812" #Make into user input AvgPBGField= "AvgPBG0812" #Make into user input arcpy.AddField_management(CbuffersFL,TotalGrpField,"DOUBLE") print arcpy.GetMessages(),"\n" arcpy.AddField_management(CbuffersFL,TotalPBGField,"DOUBLE") print arcpy.GetMessages(),"\n" arcpy.AddField_management(CbuffersFL,AvgGrpField, "DOUBLE") print arcpy.GetMessages(),"\n" arcpy.AddField_management(CbuffersFL,AvgPBGField,"DOUBLE") print arcpy.GetMessages(),"\n" #Join All Nest Files Table to new selected buffer file. This table was preproccessed and made into a single dbf table (joined by cluster key) showing groupsize and PBG by year. #A column was created called TotalSize and Total PGB for each cluster. The total column will be used to help calculate the average group size/average pbg size for RCW clusters #whose 3-mile dispersal buffer intersect with each parcel. #This means this table will have to be updated manually every year unless written into the script. #This join is used to calculate criteria 2 and 3. #Input for a join MUST BE A LAYER NestFiles="/RCW/Nest Data/Edited Nest Data/Nest_All.dbf" arcpy.AddJoin_management(CbuffersFL,"Cluster_ke",NestFiles,"Key12","KEEP_ALL") print arcpy.GetMessages(),"\n" GrpField1= "Nest_All.GrpSz08" #User selects field GrpField2= "Nest_All.GrpSz09" #User selects field GrpField3= "Nest_All.GrpSz10" #User selects field GrpField4= "Nest_All.GrpSz11" #User Selects field GrpField5= "Nest_All.GrpSz12" #User selects field GrpField1New= '!'+GrpField1+'!' GrpField2New= '!'+GrpField2+'!' GrpField3New= '!'+GrpField3+'!' GrpField4New= '!'+GrpField4+'!' GrpField5New= '!'+GrpField5+'!' GrpExpression = (GrpField1New+GrpField2New+GrpField3New+GrpField4New+GrpField5New) arcpy.CalculateField_management(CbuffersFL,TotalGrpField,GrpExpression,"PYTHON") print arcpy.GetMessages() #Check to see if calculation is working TotalGrpFieldNew=CbuffersFL[:-6]+"."+TotalGrpField print TotalGrpFieldNew sc = arcpy.SearchCursor(CbuffersFL) for line in sc: print line.getValue(TotalGrpFieldNew) del line del sc
GrpField1= "Nest_All.GrpSz08" #User selects field GrpField2= "Nest_All.GrpSz09" #User selects field GrpField3= "Nest_All.GrpSz10" #User selects field GrpField4= "Nest_All.GrpSz11" #User Selects field GrpField5= "Nest_All.GrpSz12" #User selects field GrpField1New= '!'+GrpField1+'!+' GrpField2New= '!'+GrpField2+'!+' GrpField3New= '!'+GrpField3+'!+' GrpField4New= '!'+GrpField4+'!+' GrpField5New= '!'+GrpField5+'!' GrpExpression = (GrpField1New+GrpField2New+GrpField3New+GrpField4New+GrpField5New)
#Get count of how many records are selected. This calculation is used to calculate avg group size and avg pbg size over the past five yrs. SelectedCount=int(arcpy.GetCount_management(CbuffersFL).getOutput(0)) print "\nThere are",SelectedCount, "buffers that intersect with parcel", FID #calculate the avg group size for selected groups. This avgerage will be temporarily recorded into the GrpAvg0812 Field located within CbuffersFL. #Once calculated an update cursor will be used to record this average in the selected parcels shapefile. GrpFieldJoin=CbuffersFL[:-6]+"."+TotalGrpField GrpFieldJoinNew='!'+GrpFieldJoin+'!/' GrpExpression=(GrpFieldJoinNew)/SelectedCount)
GrpExpression=(int(GrpFieldJoinNew)/SelectCount)
ValueError: invalid literal for int() with base 10: '!RCW_Cluster_2010_3miBuff.TotGrpCalc!/'
for parcel in range(0,1092): FID = "FID=%s" % (parcel) arcpy.SelectLayerByAttribute_management(SelectedParcelsFL,"NEW_SELECTION",FID) arcpy.SelectLayerByLocation_management(CbuffersFL,"INTERSECT",SelectedParcelsFL) #Get count of how many records are selected. This calculation is used to calculate avg group size and avg pbg size over the past five yrs. SelectedCount=int(arcpy.GetCount_management(CbuffersFL).getOutput(0)) print "\nThere are",SelectedCount, "buffers that intersect with parcel", FID #calculate the avg group size for selected groups. This avgerage will be temporarily recorded into the GrpAvg0812 Field located within CbuffersFL. #Once calculated an update cursor will be used to record this average in the selected parcels shapefile. GrpFieldJoin=CbuffersFL[:-6]+"."+TotalGrpField GrpFieldJoinNew='!'+GrpFieldJoin+'!' arcpy.AddMessage("Calculating average group size over the last 5 years for RCW Clusters whose 3-mile dispersal buffer intercects each parcel") arcpy.CalculateField_management(CbuffersFL,AvgGrpField,(GrpFieldJoinNew/SelectedCount),"PYTHON")
TypeError: unsupported operand type(s) for /: 'str' and 'int'
(int(GrpFieldJoinNew)/SelectedCount)
ValueError: invalid literal for int() with base 10: '!RCW_Cluster_2010_3miBuff.TotGrpCalc!'
arcpy.CalculateField_management(CbuffersFL,AvgGrpField,(GrpFieldJoinNew/SelectedCount),"PYTHON")
SelectedCount=int(arcpy.GetCount_management(CbuffersFL).getOutput(0)) # the name is used to prefix the field name prefix = arcpy.Describe(CbuffersFL).name expr = "!{0}.{1}! / float({2})".format(prefix, TotalGrpField, SelectedCount) arcpy.CalculateField_management(CbuffersFL, AvgGrpField, expr, "PYTHON_9.3")
GrpField1= "Nest_All.GrpSz08" GrpField2= "Nest_All.GrpSz09" GrpField3= "Nest_All.GrpSz10" GrpField4= "Nest_All.GrpSz11" GrpField5= "Nest_All.GrpSz12" fmt = "!{0}! + !{1}! + !{2}! + !{3}! + !{4}! + !{5}!" Grpexpression = fmt.format(GrpField1New, GrpField2New, \ GrpField3New, GrpField4New, GrpField5New)
fmt = "sum([!{0}!, !{1}!, !{2}!, !{3}!, !{4}!, !{5}!])"
Grpexpression = fmt.format(GrpField1New, GrpField2New, \
GrpField3New, GrpField4New, GrpField5New)