¿Cómo leer los valores de los atributos utilizando PyQGIS?

12

¿Cuál es la forma de obtener la información contenida en la tabla de atributos, por ejemplo, en la columna 2, fila 2 usando pyqgis?

    
pregunta user16018 11.03.2013 - 09:35

3 respuestas

31

Para recorrer cada función de una capa, use el generador getFeatures() . Esto devuelve un iterador de características ( QgsFeature ) en la capa.

for feature in layer.getFeatures():
    pass # do something with feature

Si solo te interesa una característica en particular, en lugar de todas las características de la capa, puedes acceder a ella usando un QgsFeatureRequest y es FID:

fid = 1 # the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)

Una vez que tenga un objeto QgsFeature , puede usar el método attributes() para recuperar los atributos (a.k.a. columnas o campos) asociados con esa característica (a.k.a. row), por ejemplo:

# get the feature's attributes
attrs = feature.attributes()
# print the second attribute (note zero based indexing of Python lists)
print(attrs[1])

Si desea indexar el campo por su nombre, en lugar de por un número, debe usar las asignaciones de campo:

idx = layer.fieldNameIndex('name')
print(feature.attributes()[idx])

El índice de campo no debería cambiar durante el ciclo, por lo que solo necesita llamarlo una vez.

Hay más información y ejemplos en el libro de recetas de PyQGIS: enlace

Actualizar

Puedes acceder a los atributos de las características mucho más fácilmente utilizando QgsFeature como dict , por ejemplo,

for feature in layer.getFeatures():
    name = feature["name"]

No estoy seguro de qué versión vino o si siempre ha estado allí.

    
respondido por el Snorfalorpagus 11.03.2013 - 09:39
10

Pensé que en realidad agregaría algo de código, ya que este problema de Google devuelve esta pregunta ... la mayoría de las personas prefieren una explicación rápida o un fragmento de código a un enlace que lleva a una página que tiene mucha información adicional.

Para obtener la información de una tabla, primero tendría que acceder a la capa. características . En mi caso pongo las características en una variable. Luego, recorre las características y, para cada característica, llama a sus atributos , que pueden  luego se imprimirá utilizando su índice de columna .  Por ejemplo, si quisiera obtener todos los valores en la segunda columna, entonces  haz esto:

lyr = iface.activeLayer()

features = lyr.getFeatures()

for feat in features:
    attrs = feat.attributes()
    print attrs[1]
    
respondido por el BritishSteel 07.03.2015 - 18:24
1

Las respuestas anteriores solo muestran cómo hacer esto para la capa activa. Creo que, en muchos casos, es posible que desee buscar dicho atributo para una capa que no sea la capa activa o una capa marcada en la ventana Capas. El código a continuación obtendrá una lista de todas las capas que ha agregado a su ventana de Capas (sin importar si están marcadas o activas) y encontrará el atributo en la fila 2, columna 2.

from qgis.core import QgsProject

layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
        value = layer.getFeature(2).attribute(2)

Nota mapLayersByName devuelve una lista de capas con el nombre dado. Supongo que existe uno para este ejemplo.

    
respondido por el ajpieri 23.10.2018 - 19:02

Lea otras preguntas en las etiquetas