Qual é a maneira de obter as informações contidas na tabela de atributos, digamos na coluna 2, linha 2, usando pyqgis?
Qual é a maneira de obter as informações contidas na tabela de atributos, digamos na coluna 2, linha 2, usando pyqgis?
Respostas:
Para percorrer todos os recursos de uma camada, use o getFeatures()
gerador. Isso retorna um iterador de features ( QgsFeature
) na camada.
for feature in layer.getFeatures():
pass # do something with feature
Se você estiver interessado apenas em um recurso específico, em vez de todos os recursos da camada, poderá acessá-lo usando um QgsFeatureRequest
e é FID:
fid = 1 # the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)
Depois de ter um QgsFeature
objeto, você pode usar o attributes()
método para recuperar os atributos (também conhecidos como colunas ou campos) associados a esse recurso (conhecido como linha), por exemplo:
# get the feature's attributes
attrs = feature.attributes()
# print the second attribute (note zero based indexing of Python lists)
print(attrs[1])
Se você deseja indexar o campo por seu nome, e não por um número, use os mapeamentos de campo:
idx = layer.fieldNameIndex('name')
print(feature.attributes()[idx])
O índice do campo não deve mudar durante o loop, portanto, você só precisa chamá-lo uma vez.
Há mais informações e exemplos no livro de receitas do PyQGIS: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer
Atualizar
Você pode acessar atributos de recursos muito mais facilmente usando a QgsFeature
como um dict
, por exemplo,
for feature in layer.getFeatures():
name = feature["name"]
Não tenho certeza de qual versão veio ou se sempre esteve lá.
Achei que eu realmente adicionaria algum código, pois esse problema no Google retorna essa pergunta ... a maioria das pessoas prefere uma explicação rápida ou um trecho de código a um link que leva a uma página com muitas informações adicionais.
Para obter as informações em uma tabela, você primeiro precisa acessar os recursos da camada . No meu caso, eu coloquei os recursos em uma variável. Depois, você percorre os recursos e, para cada recurso, chama seus atributos , que podem ser impressos usando o índice de colunas . Por exemplo, se eu gostaria de obter todos os valores na segunda coluna, faria o seguinte:
lyr = iface.activeLayer()
features = lyr.getFeatures()
for feat in features:
attrs = feat.attributes()
print attrs[1]
As respostas acima mostram apenas como fazer isso para a camada ativa. Eu acho que, em muitos casos, você pode querer encontrar o referido atributo para uma camada que não seja a camada ativa ou uma camada marcada na janela Camadas. O código abaixo obterá uma lista de todas as camadas que você adicionou à sua janela Camadas (independentemente de estarem marcadas ou ativas) e encontrará o atributo na linha 2, coluna 2.
from qgis.core import QgsProject
layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
value = layer.getFeature(2).attribute(2)
Nota mapLayersByName retorna uma lista de camadas com o nome fornecido. Estou assumindo que existe um para este exemplo.