4 votos

¿Obtener todos los valores (o los seleccionados) de un único campo de una tabla mediante ArcPy?

Estoy buscando una manera de obtener todos los valores de un solo campo en una tabla de ArcGIS. Las razones para hacer esto podrían incluir pegar los valores en un documento de texto o SQL donde cláusula.

Dado que ArcGIS 10.1 no parece tener una manera de hacer esto (como hacer clic con el botón derecho del ratón en el campo > Copiar), me gustaría ver si puedo escribir un script de ArcPy para hacer esto por mí. El siguiente código escribirá los valores en la ventana de Python si le paso un tablename y fieldname explícitos:

import arcpy
cur = arcpy.SearchCursor("myTableName")
fieldname = "myFieldName"

for row in cur:
    print row.getValue(fieldname)

del row, cur

Sin embargo, para hacer de esto una herramienta dinámica, me gustaría determinar una manera de identificar:

  1. la tabla activa (en la ventana de tabla), y
  2. la columna/campo activo (resaltado) de esa tabla

en ese momento puedo cambiar dinámicamente el nombre de la pestaña y el nombre del campo en el código anterior, en función de lo que se seleccione.

¿Alguna idea?

4voto

aditya Puntos 111

Así que, aunque no es tan interactivo como lo que originalmente quería, repensé mis opciones y me di cuenta de que podía crear una herramienta Python GP que permitiera al usuario elegir el nombre de la pestaña y el nombre del campo desde un cuadro de diálogo GP estándar. También agregué una casilla booleana que permitiría al usuario listar cada ítem en una nueva línea, o como una lista Python convertida en cadena. Necesitará configurar el parámetro fieldname para que sea "Obtenido de" el parámetro de tabla en el diálogo de configuración de parámetros de la herramienta GP.

Al igual que cualquier herramienta GP, sólo mostrará valores para el conjunto de características actualmente seleccionado, si existe un conjunto de selección.

import arcpy

tablename = arcpy.GetParameterAsText(0)
fieldname = arcpy.GetParameterAsText(1)
asCSV = arcpy.GetParameterAsText(2)

#Create a search cursor of selected records
cur = arcpy.SearchCursor(tablename)

#loop over selected elements and print the values
if asCSV == "true":
    csv = []
    for row in cur:
        csv.append(row.getValue(fieldname))
    #Print to dialog as a CSV-style Python list (string)
    arcpy.AddMessage("  {0} from {1}: \n  {2}".format(fieldname,tablename, [item.encode('ascii') for item in csv] ))

else:
    arcpy.AddMessage("  {0} from {1}:".format(fieldname,tablename))
    #Print each item on a new line
    for row in cur:
        print row.getValue(fieldname)
        arcpy.AddMessage("  {0}".format(row.getValue(fieldname)))

del row, cur

2voto

Örjan Jämte Puntos 3127

Esto no es exactamente lo que está buscando, pero el pythonaddins es probablemente lo más cerca que vas a estar:

lyr = pythonaddins.GetSelectedTOCLayerOrDataFrame()

La advertencia, por supuesto, es que este módulo sólo puede utilizarse en un complemento de Python (¡no en una caja de herramientas!).

Creo que tendrás que buscar en ArcObjects y ver si algún método/función de allí te puede ayudar.

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