Qual è il modo per ottenere le informazioni contenute nella tabella degli attributi, diciamo nella colonna 2, riga 2 usando pyqgis?
Qual è il modo per ottenere le informazioni contenute nella tabella degli attributi, diciamo nella colonna 2, riga 2 usando pyqgis?
Risposte:
Per eseguire il ciclo su ogni funzione in un livello, utilizzare il getFeatures()
generatore. Questo restituisce un iteratore di features ( QgsFeature
) nel layer.
for feature in layer.getFeatures():
pass # do something with feature
Se sei interessato solo a una particolare funzionalità, anziché a tutte le funzionalità del livello, puoi accedervi usando a QgsFeatureRequest
ed è FID:
fid = 1 # the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)
Una volta che hai un QgsFeature
oggetto, puoi utilizzare il attributes()
metodo per recuperare gli attributi (aka colonne o campi) associati a quella funzione (aka riga), ad esempio:
# get the feature's attributes
attrs = feature.attributes()
# print the second attribute (note zero based indexing of Python lists)
print(attrs[1])
Se si desidera indicizzare il campo in base al nome, anziché a un numero, è necessario utilizzare i mapping dei campi:
idx = layer.fieldNameIndex('name')
print(feature.attributes()[idx])
L'indice di campo non dovrebbe cambiare durante il ciclo, quindi è necessario chiamarlo solo una volta.
Ulteriori informazioni ed esempi nel ricettario PyQGIS: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer
Aggiornare
È possibile accedere agli attributi caratteristica molto più facilmente utilizzando il QgsFeature
come una dict
, ad esempio,
for feature in layer.getFeatures():
name = feature["name"]
Non sono sicuro di quale versione sia arrivata o se sia sempre stata lì.
Pensavo di aggiungere effettivamente un po 'di codice, dato che googling questo problema restituisce questa domanda ... la maggior parte delle persone preferisce una spiegazione rapida o uno snippet di codice a un collegamento che porta a una pagina che contiene molte informazioni aggiuntive.
Per ottenere le informazioni in una tabella devi prima accedere alle funzionalità del livello . Nel mio caso ho inserito le funzionalità in una variabile. Quindi esegui il ciclo tra le funzioni e per ciascuna funzione chiami i suoi attributi , che possono quindi essere stampati utilizzando il loro indice di colonna . Ad esempio, se desidero ottenere tutti i valori nella seconda colonna, farei questo:
lyr = iface.activeLayer()
features = lyr.getFeatures()
for feat in features:
attrs = feat.attributes()
print attrs[1]
Le risposte sopra mostrano solo come farlo per il livello attivo. Penso che, in molti casi, potresti voler trovare detto attributo per un livello che non è i livelli attivi o un livello controllato nella finestra Livelli. Il codice seguente otterrà un elenco di tutti i livelli aggiunti alla finestra Livelli (indipendentemente dal fatto che siano selezionati o attivi) e troverà l'attributo nella riga 2, colonna 2.
from qgis.core import QgsProject
layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
value = layer.getFeature(2).attribute(2)
Nota mapLayersByName restituisce un elenco di livelli con il nome specificato. Suppongo che ne esista uno per questo esempio.