#Import standard library modules import arcgisscripting import os #Create the Geoprocessor object gp = arcgisscripting.create(9.3) #Get a list of the featureclasses in the input folder source_fc = "H:/temp_D/testt" Entity = "H:/temp_D/test" outputfolder = "H:/temp_D" gp.Toolbox = "Data Management" # convert a featureclass to a layer gp.MakeFeatureLayer_management (source_fc, "source_lyr") # have Layers for AddJoin gp.AddJoin_management("source_lyr", "GID", Entity, "GID", "KEEP_ALL") # convert a layer to a featureclass gp.CopyFeatures_management ("source_lyr", source_fc) gp.FeatureClassToShapefile_conversion(source_fc, outputfolder) # clear memory of layers gp.Delete("source_lyr") gp.AddMessage(gp.GetMessages()) print gp.GetMessages()
Solved! Go to Solution.
Thank you for the help.
The AddJoin code below worked well.
As you said, I want to add a loop to the AddJoin of a grid and multiple bird range.
Please kindly advise how to code it.
Thank you.
################################################## ######################## ##AddJoin feature layers to a feature layer ##Elaine Kuo ##30 June 2013 ################################################## ####################### #Import standard library modules import arcgisscripting import os #Create the Geoprocessor object gp = arcgisscripting.create(9.3) gp.QualifiedFieldNames = "UNQUALIFIED" #Get a list of the featureclasses in the input folder source_fc = r"H:/temp_D/testt/A_grid.shp" Entity = r"H:/temp_D/test/geoc0283.shp" output_fc = r"H:/temp_D/test/grid_rng.shp" gp.Toolbox = "Data Management" # convert a featureclass to a layer gp.MakeFeatureLayer_management (source_fc, "source_lyr") # have Layers for AddJoin gp.AddJoin_management("source_lyr", "GID", Entity, "GID", "KEEP_ALL") # convert a layer to a featureclass gp.CopyFeatures_management ("source_lyr", output_fc) # delete Field gp.deletefield (output_fc, "FID_1; GID_1") # Remove the join gp.RemoveJoin("source_lyr", "geoc0283") # clear memory of layers gp.Delete("source_lyr") gp.AddMessage(gp.GetMessages()) print gp.GetMessages()
Just for the record, a single forward slash ("/") works fine, it's the backslash ("\") that's illegal.
The following techniques will all work in a path:
1.) forward slashes = /
2.) double backslashes = \\
3.) raw string with backslashes = r"H:\InfoRequest"
Thanks for the clarification. Python is not my language of choice, and the escape character and path string handling is something that trips me up and many other posts in this forum. So I figured it could be related to his problem (even though my answer made the problem worse on that issue). One of the reasons I use Model Builder instead of typing in Python directly when I get errors about paths.
Great.
So this is the core of any loop you would build if you needed to process multiple bird range shape files against the grid.
################################################## ######################## ##AddJoin feature layers to a feature layer ##Elaine Kuo ##01 July 2013 ################################################## ####################### #Import standard library modules import arcgisscripting import os #Create the Geoprocessor object gp = arcgisscripting.create(9.3) gp.QualifiedFieldNames = "UNQUALIFIED" #Set the input workspace workingfolder= r"H:/temp_D/test" gp.Workspace = workingfolder #Set the output workspace outputfolder= r"H:/temp_D" outWorkspace= outputfolder source_fc = r"H:/temp_D/testt/A_grid.shp" Entity = r"H:/temp_D/test/geoc0283.shp" #Get a list of the featureclasses in the input folder fcs = gp.ListFeatureClasses() # Loop through every item in the list that was just generated for fc in fcs: gp.Toolbox = "Data Management" # Make a FeatureClass layer gp.MakeFeatureLayer_management (source_fc, "source_lyr") # have Layers for AddJoin gp.AddJoin_management("source_lyr", "GID", fc, "GID", "KEEP_ALL") # convert a layer to a featureclass out_name = gp.Describe("source_lyr").name out_name = gp.ValidateTableName(out_name, outputfolder) out_shape = outputfolder + "/" + out_name + ".shp" gp.CopyFeatures_management ("source_lyr", out_shape) # delete Field gp.deletefield (out_shape, "FID_1; GID_1") # Remove the join gp.RemoveJoin("source_lyr", fc) # clear memory of layers gp.Delete("source_lyr") gp.AddMessage(gp.GetMessages()) print gp.GetMessages()
################################################## ######################## ##AddJoin feature layers to a feature layer ##Elaine Kuo ##01 July 2013 ################################################## ####################### #Import standard library modules import arcgisscripting import os #Create the Geoprocessor object gp = arcgisscripting.create(9.3) gp.QualifiedFieldNames = "UNQUALIFIED" #Set the input workspace workingfolder= "H:/temp_D/test" gp.Workspace = workingfolder #Set the output workspace outputfolder= "H:/temp_D" outWorkspace= outputfolder source_fc = "H:/temp_D/testt/A_grid.shp" Entity = "H:/temp_D/test/geoc0283.shp" #Get a list of the featureclasses in the input folder fcs = gp.ListFeatureClasses() gp.Toolbox = "Data Management" # Make a FeatureClass layer gp.MakeFeatureLayer_management (source_fc, "source_lyr") # Loop through every item in the list that was just generated for fc in fcs: # have Layers for AddJoin gp.AddJoin_management("source_lyr", "GID", fc, "GID", "KEEP_ALL") # convert a layer to a featureclass out_name = gp.Describe("source_lyr").name out_name = gp.ValidateTableName(out_name, outputfolder) out_shape = outputfolder + "/" + out_name + ".shp" gp.CopyFeatures_management ("source_lyr", out_shape) # delete Field (need to clean up with a lot more ID fields that the code you have below since now there are 50 GID values.) gp.deletefield (out_shape, "FID_1; GID_1") # Don't bother removing 50 joins, just kill the layer # clear memory of layers gp.Delete("source_lyr") gp.AddMessage(gp.GetMessages()) print gp.GetMessages()
I agree with you, getting the path (and slashes) correct seems to be a common problem out there. In fact a great number of people I come across incorrectly think that this is a back slash ("/") and this is a forward slash ("\"), which in fact is the opposite.
################################################## ######################## ##AddJoin feature layers to a feature layer ##Elaine Kuo ##01 July 2013 ################################################## ####################### #Import standard library modules import arcgisscripting import os #Create the Geoprocessor object gp = arcgisscripting.create(9.3) gp.QualifiedFieldNames = "UNQUALIFIED" #Set the input workspace workingfolder= "H:/temp_D/test" gp.Workspace = workingfolder #Set the output workspace outputfolder= "H:/temp_D" outWorkspace= outputfolder source_fc = "H:/temp_D/testt/A_grid.shp" Entity = "H:/temp_D/test/geoc0283.shp" #Get a list of the featureclasses in the input folder fcs = gp.ListFeatureClasses() gp.Toolbox = "Data Management" # Make a FeatureClass layer gp.MakeFeatureLayer_management (source_fc, "source_lyr") $ A counter to separate the first time through the loop from all other times counter = 0 # Loop through every item in the list that was just generated for fc in fcs: if counter == 0: # set up first Layer for AddJoin gp.AddJoin_management("source_lyr", "GID", fc, "GID", "KEEP_ALL") else: # set up second and following Layers for AddJoin gp.AddJoin_management("source_lyr", "A_grid.GID", fc, "GID", "KEEP_ALL") counter += 1 # convert a layer to a featureclass out_name = gp.Describe("source_lyr").name out_name = gp.ValidateTableName(out_name, outputfolder) out_shape = outputfolder + "/" + out_name + ".shp" gp.CopyFeatures_management ("source_lyr", out_shape) # delete Field (need to clean up with a lot more ID fields that the code you have below since now there are 50 GID values.) gp.deletefield (out_shape, "FID_1; GID_1") # Don't bother removing 50 joins, just kill the layer # clear memory of layers gp.Delete("source_lyr") gp.AddMessage(gp.GetMessages()) print gp.GetMessages()
################################################## ######################## ##AddJoin feature layers to a feature layer ##Elaine Kuo ##01 July 2013 ################################################## ####################### #Import standard library modules import arcgisscripting import os #Create the Geoprocessor object gp = arcgisscripting.create(9.3) gp.QualifiedFieldNames = "UNQUALIFIED" #Set the input workspace workingfolder= "H:/temp_D/test" gp.Workspace = workingfolder #Set the output workspace outputfolder= "H:/temp_D" outWorkspace= outputfolder source_fc = "H:/temp_D/testt/A_grid.shp" Entity = "H:/temp_D/test/geoc0283.shp" #Get a list of the featureclasses in the input folder fcs = gp.ListFeatureClasses() gp.Toolbox = "Data Management" # Make a FeatureClass layer gp.MakeFeatureLayer_management (source_fc, "source_lyr") # Loop through every item in the list that was just generated for fc in fcs: # have Layers for AddJoin gp.AddJoin_management("source_lyr", "GID", fc, "GID", "KEEP_ALL") # convert a layer to a featureclass out_name = gp.Describe("source_lyr").name out_name = gp.ValidateTableName(out_name, outputfolder) out_shape = outputfolder + "/" + out_name + ".shp" gp.CopyFeatures_management ("source_lyr", out_shape) # delete Field (need to clean up with a lot more ID fields that the code you have below since now there are 50 GID values.) gp.deletefield (out_shape, "FID_1; GID_1") # Don't bother removing 50 joins, just kill the layer # clear memory of layers gp.Delete("source_lyr") gp.AddMessage(gp.GetMessages()) print gp.GetMessages()
################################################## ######################## ##AddJoin feature layers to a feature layer ##Elaine Kuo ##01 July 2013 ################################################## ####################### #Import standard library modules import arcgisscripting import os #Create the Geoprocessor object gp = arcgisscripting.create(9.3) gp.QualifiedFieldNames = "UNQUALIFIED" #Set the input workspace workingfolder= "H:/temp_D/test" gp.Workspace = workingfolder #Set the output workspace outputfolder= "H:/temp_D" outWorkspace= outputfolder source_fc = "H:/temp_D/testt/A_grid.shp" Entity = "H:/temp_D/test/geoc0283.shp" #Get a list of the featureclasses in the input folder fcs = gp.ListFeatureClasses() gp.Toolbox = "Data Management" # Make a FeatureClass layer gp.MakeFeatureLayer_management (source_fc, "source_lyr") $ A counter to separate the first time through the loop from all other times counter = 0 # Loop through every item in the list that was just generated for fc in fcs: if counter == 0: # set up first Layer for AddJoin gp.AddJoin_management("source_lyr", "GID", fc, "GID", "KEEP_ALL") else: # set up second and following Layers for AddJoin gp.AddJoin_management("source_lyr", "A_grid.GID", fc, "GID", "KEEP_ALL") counter += 1 # convert a layer to a featureclass out_name = gp.Describe("source_lyr").name out_name = gp.ValidateTableName(out_name, outputfolder) out_shape = outputfolder + "/" + out_name + ".shp" gp.CopyFeatures_management ("source_lyr", out_shape) # delete Field (need to clean up with a lot more ID fields that the code you have below since now there are 50 GID values.) gp.deletefield (out_shape, "FID_1; GID_1") # Don't bother removing 50 joins, just kill the layer # clear memory of layers gp.Delete("source_lyr") gp.AddMessage(gp.GetMessages()) print gp.GetMessages()
# delete Field (need to clean up with a lot more ID fields that the code you have below since now there are 50 GID values.) gp.deletefield (out_shape, "FID_*; GID_*")
Thanks a lot.
The code worked wonderfully for three shapefiles.
As for delete fields, I am thinking if wildcard will help in this condition.
(The field names of the three AddJoin bird range are "FID_1; GID_1", "FID_12; GID_12", and "FID_12_13; GID_12_13")
Therefore, I replaced the gp.delete with the following code.# delete Field (need to clean up with a lot more ID fields that the code you have below since now there are 50 GID values.) gp.deletefield (out_shape, "FID_*; GID_*")
The code worked well, but none of the three FID and GID fields were deleted.
Please kindly help and thank you.
(It is the first time my problem can be solved so quickly. Thanks greatly.)
fieldList = gp.ListFields(out_shape) for field in fieldList: if field.name[1:3] == "ID_": gp.deletefield (out_shape, field.name)