4 votos

Agregando campos por entrada de usuario en ArcPy?

Soy nuevo en Python y estoy tratando de crear un script que añada campos a una clase de entidad. El script proporcionado se está ejecutando bien, pero quiero crear un parámetro adicional que solicite la longitud de campo requerida de los campos a crear. La longitud del campo solo es importante si se selecciona el tipo de campo "TEXTO". El script solo debería tener en cuenta el parámetro adicional si el usuario selecciona "TEXTO" bajo el tipo de campo. Creo que necesito poner una declaración if...else, pero no sé cómo hacerlo.

    import arcpy
    # conjunto de datos de entrada (clase de entidad, shapefile)
    inputFC = arcpy.GetParameterAsText(0)
    # lista de nombres de campo
    inputString =arcpy.GetParameterAsText(1)
    fieldList =inputString.split(";")
    fieldType = arcpy.GetParameterAsText(2)

    for name in fieldList:
        arcpy.AddField_management(inputFC , name, fieldType)
        arcpy.AddMessage ("campo creado: " + name)

    arcpy.AddMessage ("Cálculo completo")

introducir descripción de la imagen aquí

3voto

Alex Tereshenkov Puntos 13433

¿Qué pasa si el usuario agrega varios campos de diferentes tipos? ¿Cómo harías coincidir los tipos de los campos y los nombres de los campos?

Si deseas proporcionar una interfaz fácil de trabajar para agregar campos, realmente estás buscando el tipo de datos FieldMappings en los parámetros de la herramienta de script.

enter image description here

Crea un nuevo parámetro de Field Mappings y mira cómo se pueden agregar campos. El usuario proporciona toda la información necesaria para crear uno o más campos. En tu código fuente, extraes la información necesaria sobre cada campo que el usuario proporcionó.

import arcpy

fields_to_add = arcpy.GetParameter(0) #de tipo `Field Mappings`
for field in [item.fields[0] for item in fields_to_add]:
    arcpy.AddMessage('{}'.format([field.name, field.aliasName, field.type, field.length]))
    #arcpy.AddField_management(pasa tus parámetros aquí)

Después de que el usuario haya proporcionado la información en la interfaz de usuario, el código imprimiría:

[u'NuevoNombreCampo', u'NuevoNombreCampo', u'Cadena', 50]
[u'NuevoNombreCampo1', u'NuevoNombreCampo1', u'Cadena', 50]

Si aún deseas mantener tu enfoque de obtener toda la información sobre los campos sin usar asignaciones de campos, tienes algunas opciones más:

  1. Usar el Cuadro de valores Value Table.
  2. Usar el Record Set tipo de datos.
  3. Usar Validación de herramientas para manejar las reglas del negocio sobre nombres de campos, tipos de datos, etc.

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