I need help setting up an if-than-else within a if-else statement. I need the code i need to check if selected features has any text inside the AddressID field if it does have any text inside the field i need it to by pass the with arcpy.da.SearchCursor and the with arcpy.da.UpdateCursor and move on to the next process. if doesn't have any text inside the field i need it to preform the with arcpy.da.SearchCursor and the with arcpy.da.UpdateCursor. I would appreciate any help.
- import arcpy, os
- from arcpy import env
- env.workspace = r"C:\temp\python\test.gdb"
- arcpy.env.qualifiedFieldNames = False
- arcpy.env.overwriteOutput = True
- BldSelection = "BuildingFootprints"
- Bld = arcpy.env.workspace + os.sep + "BuildingFootprints" #target point feature class
- BldCount = int(arcpy.GetCount_management(Bld).getOutput(0))
- dsc = arcpy.Describe(BldSelection)
- selection_set = dsc.FIDSet
- if len(selection_set) == 0:
- print "There are no features selected"
- elif BldCount >= 1:
- #Gets the highest AddressID and calculates new point to assign new highest AddressID
- Bld_list = []
- with arcpy.da.SearchCursor(Bld, ["Bld_ID"]) as cursor:
- for row in cursor:
- try:
- if "Bld" in row[0]:
- Bld_list.append(int(row[0].strip("Bld")))
- except TypeError:
- pass
- del cursor
- print Bld_list
- Bld_list.sort()
- Bld_ID = Bld_list[-1] + 1
- with arcpy.da.UpdateCursor(BldSelection, "Bld_ID") as rows:
- for row in rows:
- row[0] = 'Bld' + str(Bld_ID)
- Bld_ID += 1
- rows.updateRow(row)
- del row
- del rows
Why not use Make Feature Layer—Help | ArcGIS for Desktop and remove those that have data before you start your cursor.
MakeFeatureLayer_management (in_features, out_layer, "Field" > '')
I am not sure i follow, add MakeFeatureLayer_management (in_features, out_layer, "Field" > '') in between lines 20 & 21?
Something similar to below
import arcpy, os from arcpy import env env.workspace = r"C:\temp\python\test.gdb" arcpy.env.qualifiedFieldNames = False arcpy.env.overwriteOutput = True BldSelection = "BuildingFootprints" Bld = arcpy.env.workspace + os.sep + "BuildingFootprints" #target point feature class bldlyr = arcpy.MakeFeatureLayer_management(Bld,"Building_layer","AddressID > ''") BldCount = int(arcpy.GetCount_management(bldlyr).getOutput(0)) dsc = arcpy.Describe(BldSelection) selection_set = dsc.FIDSet if len(selection_set) == 0: print "There are no features selected" elif BldCount >= 1: #Gets the highest AddressID and calculates new point to assign new highest AddressID Bld_list = [] with arcpy.da.SearchCursor(bldlyr, ["Bld_ID"]) as cursor: for row in cursor: try: if "Bld" in row[0]: Bld_list.append(int(row[0].strip("Bld"))) except TypeError: pass del cursor print Bld_list Bld_list.sort() Bld_ID = Bld_list[-1] + 1 with arcpy.da.UpdateCursor(BldSelection, "Bld_ID") as rows: for row in rows: row[0] = 'Bld' + str(Bld_ID) Bld_ID += 1 rows.updateRow(row) del row del rows
Wes suggestion is interesting, i never thought of doing that. I made the change to the code but the Bld_ID for the selected feature doesn't get populated.
I will still like to see how to use the if-ten-else
import arcpy, os from arcpy import env arcpy.env.workspace = r"Database Servers\DSD15_SQLEXPRESS.gds\CCAPTEST (VERSION:dbo.DEFAULT)" arcpy.env.qualifiedFieldNames = False arcpy.env.overwriteOutput = True BldSelection = "CCAPTEST.DBO.BldTaxChar" Bld = arcpy.env.workspace + os.sep + "CCAPTEST.DBO.BldTaxChar" #target point feature class bldlyr = arcpy.MakeFeatureLayer_management(Bld,"Building_layer","AddressID > ''") BldCount = int(arcpy.GetCount_management(bldlyr).getOutput(0)) dsc = arcpy.Describe(BldSelection) selection_set = dsc.FIDSet if len(selection_set) == 0: print "There are no features selected" elif BldCount >= 1: # Start an edit session. Must provide the worksapce. edit = arcpy.da.Editor(arcpy.env.workspace) # Edit session is started without an undo/redo stack for versioned data # (for second argument, use False for unversioned data) edit.startEditing(True) # Start an edit operation edit.startOperation() #Gets the highest AddressID and calculates new point to assign new highest AddressID Bld_list = [] with arcpy.da.SearchCursor(bldlyr, ["Bld_ID"]) as cursor: for row in cursor: try: if "Bld" in row[0]: Bld_list.append(int(row[0].strip("Bld"))) except TypeError: pass del cursor print Bld_list Bld_list.sort() Bld_ID = Bld_list[-1] + 1 with arcpy.da.UpdateCursor(BldSelection, "Bld_ID") as rows: for row in rows: row[0] = 'Bld%05d' %Bld_ID Bld_ID += 1 rows.updateRow(row) del row del rows # Stop the edit operation. edit.stopOperation() # Stop the edit session and save the changes #edit.stopEditing(True) if arcpy.Exists(parcel_lyr): arcpy.Delete_management(parcel_lyr) arcpy.RefreshActiveView()
See below
condition = 1 if condition == 1: print 'yes it is' else: print "no it isn't"
Edit
This may be a better example for what you are trying to do.
import arcpy fc = 'Your feature class' field = 'your field' with arcpy.da.SearchCursor(fc, [field]) as cursor: for row in cursor: if row[0] >'': print row[0] else: print 'update row'
ok, for some reason i was thinking i had to put an if-then-else statement after "elif BldCount >= 1: " line 21
after making the following adjustment, the selected features "Bld_ID" field still doesn't populate when i run the following code...? I get no error.
Edit:
I had things that i need to change. the code is now working, i think. i will do testing.
Thanks Wes!
import arcpy, os from arcpy import env arcpy.env.workspace = r"Database Servers\DSD15_SQLEXPRESS.gds\CCAPTEST (VERSION:dbo.DEFAULT)" arcpy.env.qualifiedFieldNames = False arcpy.env.overwriteOutput = True BldSelection = "CCAPTEST.DBO.BldTaxChar" Bld = arcpy.env.workspace + os.sep + "CCAPTEST.DBO.BldTaxChar" #target point feature class BldCount = int(arcpy.GetCount_management(Bld).getOutput(0)) dsc = arcpy.Describe(BldSelection) selection_set = dsc.FIDSet if len(selection_set) == 0: print "There are no features selected" elif BldCount >= 1: # Start an edit session. Must provide the worksapce. edit = arcpy.da.Editor(arcpy.env.workspace) # Edit session is started without an undo/redo stack for versioned data # (for second argument, use False for unversioned data) edit.startEditing(True) # Start an edit operation edit.startOperation() #Gets the highest AddressID and calculates new point to assign new highest AddressID with arcpy.da.SearchCursor(BldSelection , "Bld_ID") as cursor: for row in cursor: if row[0] >'': Bld_list = [] with arcpy.da.SearchCursor(Bld, ["Bld_ID"]) as cursor: for row in cursor: try: if "Bld" in row[0]: Bld_list.append(int(row[0].strip("Bld"))) except TypeError: pass del cursor print Bld_list Bld_list.sort() Bld_ID = Bld_list[-1] + 1 with arcpy.da.UpdateCursor(BldSelection, "Bld_ID") as rows: for row in rows: row[0] = 'Bld%05d' %Bld_ID Bld_ID += 1 rows.updateRow(row) del row del rows else: #other process sptial join edit.stopOperation() # Stop the edit operation. # Stop the edit session and save the changes #edit.stopEditing(True) #if arcpy.Exists(parcel_lyr): arcpy.Delete_management(parcel_lyr) arcpy.RefreshActiveView()
spoke to soon the code is not working, no errors, field Bld_ID doesn't get populated
I just noticed that some of the selected features are "NULL", would that affect line 36?
Null < ''