Hello,
I have a series of models/scripts that create many temporary feature layers based on selection (using the MakeFeatureLayer tool), Since they are within models and scripttools they are not automatically loaded/visualized in my MXD (which is what I want).
I was wonder if there is a way to programatically access and delete all these temporary layer files. I know I can use 'Delete' to see them and delete them individually, but Im curious if there is a way to access in ArcPy so I could loop through all layers that end in "_Layer" and delete (see below. I tried deleting everything in the 'in_memory' but that didnt remove them.
I do not want to delete the underlying feature class, just the instance of the layer. When I manually delete the temporary layer using the delete tool, it does what I want (just deleting layer instance but maintaining data)
Any help would be appreciated
thanks!
Neal
Solved! Go to Solution.
Neal,
What you are doing is correct and what I would do, you run the delete tool and just give it the Layer name and that deletes the Layer that is in memory and not the source (Feature Class). Deleting in_memory would only delete the Feature Class if your model had written to in_memory. Dan's code above is a "red herring", it is deleting the Feature Classes and not Layers created by the Make Feature Layer tool.
In model builder I would delete the layer as below, note the output of the selection (which in your case would undoubtedly have more tools attached to it) is a PRECONDITION, i.e. once all the processing is done delete the layer object.
You could probably cobble something together from the arcpy.walk example 2. and the 2nd from Delete_management. Untested of course
import arcpy
import os
workspace = "c:/data"
to_del = []
walk = arcpy.da.Walk(workspace, topdown=True, datatype="RasterDataset")
for dirpath, dirnames, filenames in walk:
for filename in filenames:
if "_layer" in filename:
to_del.append(filename)
out = ";".join([n for n in to_del]) # ---- generate a semi-colon delimited list
arcpy.env.workspace = workspace
arcpy.management.Delete(out)
Neal,
What you are doing is correct and what I would do, you run the delete tool and just give it the Layer name and that deletes the Layer that is in memory and not the source (Feature Class). Deleting in_memory would only delete the Feature Class if your model had written to in_memory. Dan's code above is a "red herring", it is deleting the Feature Classes and not Layers created by the Make Feature Layer tool.
In model builder I would delete the layer as below, note the output of the selection (which in your case would undoubtedly have more tools attached to it) is a PRECONDITION, i.e. once all the processing is done delete the layer object.