2 votos

¿Utilizar la selección por atributos y luego calcular el campo en la selección en ArcPy?

ArcGIS Pro 2.3

Quiero crear un script independiente que se ejecute fuera de ArcGIS Pro (con fines de automatización), que seleccione características (con atributos en blanco) en una clase de características y ejecute el campo de cálculo en esas selecciones.

El código de abajo no funciona. Actualiza todos los campos, no los seleccionados.

import arcpy
arcpy.management.SelectLayerByAttribute(r"C:\Automation\Categories\Coal\Coal_automation.gdb\CLAIMS", "NEW_SELECTION", "Claim_Spend_in_£ = ''", None)

arcpy.management.CalculateField(r"C:\Automation\Categories\Coal\Coal_automation.gdb\CLAIMS", "Claim_Spend_in_£", '"Unrecorded"', "PYTHON3", None)
print ("Done")

¿Cómo puedo escribir el código para ejecutar el campo de cálculo en una selección?

7voto

Anton8000 Puntos 165

Utiliza da.UpdateCursor en lugar de Field Calculator, es más versátil y fácil de usar y puedes pasar la sentencia sql para que sólo actualice las filas "seleccionadas":

import arcpy

fc = r"C:\Automation\Categories\Coal\Coal_automation.gdb\CLAIMS"
fieldname = "Claim_Spend_in_£"

sql = """{0} = ''""".format(arcpy.AddFieldDelimiters(fc,fieldname))

with arcpy.da.UpdateCursor(fc,fieldname,sql) as cursor:
    for row in cursor:
        row[0] = 'Unrecorded'
        cursor.updateRow(row)

Si desea utilizar la calculadora de campo en una capa:

No se puede hacer una selección en una clase de característica, tiene que ser una capa. Puede crear una capa con MakeFeatureLayer y luego pasar 'lyr' para calcular el campo:

sql = """{0} = ''""".format(arcpy.AddFieldDelimiters(fc,fieldname))
arcpy.MakeFeatureLayer_management(in_features=fc, out_layer='lyr', 
                                 where_clause=sql)
...

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X