fnmatch or re?

4579
1
Jump to solution
02-20-2015 09:47 AM
ToddHowell
New Contributor

I have a dynamic coded script that runs as a tool. It utilizes  arcpy.mapping to add some files to an existing template and then update the layer's symbology and name. I want to be able to differentiate between a couple different layers that have  the same geometry but different names. For example, there could be a Polyline file for a Assignment Break, as well as a Polyline file for a fire line file. This is the code that I have input so far (it isn't working).

code:

shapesList = arcpy.mapping.ListLayers(mxd_Update, "*_lyr", mainDataFrame_Update)

for shapes in shapesList:

    type = arcpy.Describe(shapes).shapetype.upper()

    name = arcpy.Describe(shapes).name.upper()

    if type== "POLYGON" and name== fnmatch.fnmatch(shapes, "*OLYGON*"):

        arcpy.mapping.UpdateLayer(mainDataFrame_Update, shapes, fire_perimeter)

        arcpy.SelectLayerByAttribute_management(shapes, "NEW_SELECTION")

        mainDataFrame_Update.zoomToSelectedFeatures()

        arcpy.SelectLayerByAttribute_management(shapes, "CLEAR_SELECTION")

        shapes.name = "Fire Perimeter"

    if type== "POLYGON" and name== fnmatch.fnmatch(shapes, "*NTENSE*"):

        arcpy.mapping.UpdateLayer(mainDataFrame_Update, shapes, intense_heat)

        shapes.name = "Intense Heat"

    if type== "POLYGON" and name== fnmatch.fnmatch(shapes, "*CATTERED*"):

        arcpy.mapping.UpdateLayer(mainDataFrame_Update, shapes, scatter_heat)

        shapes.name = "Scattered Heat"

    if type== "POLYLINE" and name== fnmatch.fnmatch(shapes, "*SSIGNMENT*"):

        arcpy.mapping.UpdateLayer(mainDataFrame_Update, shapes, assign_break)

        shapes.name = "Assignment Break"

    if type== "POLYLINE" and name== fnmatch.fnmatch(shapes, "*IRE*"):

        arcpy.mapping.UpdateLayer(mainDataFrame_Update, shapes, fire_line)

        shapes.name = "Fire Lines"

    if type== "POINT" and name== fnmatch.fnmatch(shapes, "*OINTS*"):

        arcpy.mapping.UpdateLayer(mainDataFrame_Update, shapes, fire_point)

        shapes.name = "Fire Points"

    if type== "POINT" and name== fnmatch.fnmatch(shapes, "*SOLATED*"):

        arcpy.mapping.UpdateLayer(mainDataFrame_Update, shapes, iso_heat)

        shapes.name = "Isolated Heat"

    else:

        print "no go fo sho tho"

A couple of basic questions... you can't use two (*) to grab a group of text from the middle of a string, correct? I can't really get my head wrapped around how I would use the m. functions in re to get this done... and I also can't use fnmatch because it isn't a filename, correct? Either way, I'm in over my head on this little bit

0 Kudos
1 Solution

Accepted Solutions
XanderBakker
Esri Esteemed Contributor

I didn't check the rest of the code, but you could also use something simple as:

if type == "POLYGON" and "OLYGON" in name:

BTW, next time, please use syntax highlighting for your code (see: Posting Code blocks in the new GeoNet )

View solution in original post

0 Kudos
1 Reply
XanderBakker
Esri Esteemed Contributor

I didn't check the rest of the code, but you could also use something simple as:

if type == "POLYGON" and "OLYGON" in name:

BTW, next time, please use syntax highlighting for your code (see: Posting Code blocks in the new GeoNet )

0 Kudos