¿Cuál es la forma de obtener la información contenida en la tabla de atributos, digamos en la columna 2, fila 2 usando pyqgis?
¿Cuál es la forma de obtener la información contenida en la tabla de atributos, digamos en la columna 2, fila 2 usando pyqgis?
Respuestas:
Para recorrer cada entidad en una capa, use el getFeatures()
generador. Esto devuelve un iterador de características ( QgsFeature
) en la capa.
for feature in layer.getFeatures():
pass # do something with feature
Si solo está interesado en una característica en particular, en lugar de todas las características en la capa, puede 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 QgsFeature
objeto, puede usar el attributes()
método para recuperar los atributos (también conocidos como columnas o campos) asociados con esa característica (también conocida como fila), 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 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 debe llamarlo una vez.
Hay más información y ejemplos en el libro de cocina PyQGIS: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer
Actualizar
Puede acceder a los atributos de la característica con mucha más facilidad utilizando el QgsFeature
tipo a dict
, p. Ej.
for feature in layer.getFeatures():
name = feature["name"]
No estoy seguro de qué versión llegó o si siempre ha estado allí.
Pensé que realmente agregaría algo de código, ya que googlear este problema 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 conduce a una página que tiene mucha información adicional.
Para obtener la información en una tabla, primero debe acceder a las características de la capa . 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 luego se pueden imprimir utilizando su índice de columna . Por ejemplo, si quisiera obtener todos los valores en la segunda columna, entonces haría esto:
lyr = iface.activeLayer()
features = lyr.getFeatures()
for feat in features:
attrs = feat.attributes()
print attrs[1]
Las respuestas anteriores solo muestran cómo hacer esto para la capa activa. Creo que, en muchos casos, es posible que desee encontrar dicho atributo para una capa que no son las capas activas o una capa marcada en la ventana Capas. El siguiente código obtendrá una lista de todas las capas que ha agregado a su ventana Capas (independientemente de 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.