4 votos

Encontrar el índice de un campo con su nombre usando arcpy

Quiero extraer el índice de un campo con su nombre usando arcpy. Parece que lo que he escrito es una tontería. ¿Hay algún método más simple sin usar el bucle for?

    import arcpy

    fieldList = arcpy.ListFields(self.address_ref_layer1)
    self.field_name = []
    for field in fieldList:
        self.field_name.append(field.name)
    #self.remove_pseudo_nodes()
    print self.field_name
    print self.field_name.index(u"NAMN1")

También podría escribirse:

    fieldList = arcpy.ListFields(self.address_ref_layer1
    name_index = [f.name for f in fieldList].index(u"NAMN1")

La función ListFiled devuelve una lista de objetos de campo con muchas propiedades además del nombre, pero no hay ninguna función que devuelva el índice del campo que tiene un nombre específico?

1voto

Örjan Jämte Puntos 3127

Tal vez quiera investigar el FieldMappings que tiene varios métodos que se ocupan de los índices.

En lugar de utilizar bucles for, puede utilizar comprensión de listas así:

self.field_name = [field.name for field in fieldList]

Se puede acortar aún más, ya que es posible que no necesite almacenar fieldList en absoluto:

self.field_name = [field.name for field in arcpy.ListFields(self.address_ref_layer1)]

1voto

Fan Zheng Puntos 755

Me costó encontrar una respuesta para esto en los sitios de ESRI y por eso terminé aquí. La pista es el objeto tiene campo.

import arcpy
from arcpy import env
FC = r'Your_FC'
indexes = arcpy.ListIndexes(FC)
    for index in indexes:
        for fieldname in index.fields:
        fieldname = fieldname.name
        indexname = index.name
        print fieldname, indexname

1voto

bubak Puntos 8

Así es como se obtiene el número de índice del campo con FieldMapping :

def get_field_index(table, fieldName):
    # Return: the index number of the fieldName in the table.
    field_map = arcpy.FieldMappings()
    field_map.addTable(table)
    field_index = field_map.findFieldMapIndex(fieldName)
    return field_index

0voto

Monroecheeseman Puntos 825

Esta función de Python devolverá el nombre del índice asociado a la FeatureClass y al nombre del campo introducidos.

def getIndexName(fieldname,fc):
    indexes = arcpy.ListIndexes(fc)
    for index in indexes:
        for f in index.fields:
            if f.name.upper() == fieldname.upper():
                return index.name

0voto

Anton8000 Puntos 165

También puede crear una función que devuelva el índice de un campo:

import arcpy
def findindex(table,fieldname):
    return [i.name for i in arcpy.ListFields(table)].index(fieldname)

Introduzca una clase o tabla de características y el nombre del campo:

>>>findindex(r'C:\GIS\Test.shp','EKOSTAT')
8

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