Esto es útil, pero solo parece darle el valor de los atributos. Parece que los atributos deben ser un par de nombre / valor. ¿Cómo se obtiene el nombre de cada atributo? ¿De eso se tratan los "campos"?
ajpieri
Esto realmente no responde la pregunta. Si tiene una pregunta diferente, puede hacerla haciendo clic en Hacer pregunta . También puede agregar una recompensa para llamar más la atención sobre esta pregunta una vez que tenga suficiente reputación . - De la opinión
Martin Hügi
Respuestas:
43
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 QgsFeatureRequesty es FID:
fid =1# the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)
Una vez que tenga un QgsFeatureobjeto, 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:
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 importQgsProject
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.
Respuestas:
Para recorrer cada entidad en una capa, use el
getFeatures()
generador. Esto devuelve un iterador de características (QgsFeature
) en la capa.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:Una vez que tenga un
QgsFeature
objeto, puede usar elattributes()
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:Si desea indexar el campo por su nombre, en lugar de un número, debe usar las asignaciones de campo:
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 adict
, p. Ej.No estoy seguro de qué versión llegó o si siempre ha estado allí.
fuente
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:
fuente
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.
Nota mapLayersByName devuelve una lista de capas con el nombre dado. Supongo que existe uno para este ejemplo.
fuente