4 votos

Batch Sum Fields Script usando ArcPy?

He creado un guión pitón que resume por lotes todos los campos de la cadena dentro de una tabla fc basada en la concatenación de dos campos. El guión hace un bucle a través de una lista de los campos, sin embargo se detiene a mitad de camino (el mismo punto cada vez). ¿Por qué este código no procesa los campos de cadena restantes dentro de la lista? Después de ejecutarlo una vez, si borro todos los campos que procesó correctamente la primera vez, y luego lo vuelvo a ejecutar sólo en los campos que no procesó, funciona bien. Tal vez mi problema es con esta línea:

fieldname = flist.pop(0)

¿Ideas?

Vea el código a continuación

import arcpy, os
from arcpy import env

try:

    # Local variables:
    inTable = arcpy.GetParameterAsText(0)
    outWKSpace = arcpy.GetParameterAsText(1)

    # Process: Add Field
    arcpy.AddField_management(inTable, "cat", "TEXT", "", "", "200", "", "NULLABLE", "NON_REQUIRED", "")

    flist = arcpy.ListFields(inTable, '', 'String')
    fieldname = ''

    for field in flist:
        fieldname = flist.pop(0)
        arcpy.CalculateField_management(inTable, "cat", "!Sub_Batch!+\" \"+ !"+ fieldname.name +"!", "PYTHON_9.3", "")
        outTable = outWKSpace + "\SUM_" + fieldname.name
        table2 = arcpy.Frequency_analysis(inTable, outTable, "cat", "")

        intCount = arcpy.GetCount_management(outWKSpace + "\SUM_" + fieldname.name)

        arcpy.AddMessage(fieldname.name + ' records = ' + str(intCount))

except Exception, e:
  import traceback
  map(arcpy.AddError, traceback.format_exc().split("\n"))
  arcpy.AddError(str(e))

2voto

ESV Puntos 4591

Tienes razón, el problema era con fieldname.pop(0) - esto en realidad toma el objeto en el índice 0 y lo elimina de la lista. Pero ya estás iterando a través de la lista con para field in flist . Tu código debería ser en su lugar:

for field in flist:
    arcpy.CalculateField_management(inTable, "cat", "!Sub_Batch!+\" \"+ !"+ field.name +"!", "PYTHON_9.3", "")
    outTable = outWKSpace + "\SUM_" + field.name
    table2 = arcpy.Frequency_analysis(inTable, outTable, "cat", "")

    intCount = arcpy.GetCount_management(outWKSpace + "\SUM_" + field.name)

    arcpy.AddMessage(field.name + ' records = ' + str(intCount))

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