Как можно получить информацию, содержащуюся в таблице атрибутов, скажем, в столбце 2, строке 2, используя pyqgis?
Как можно получить информацию, содержащуюся в таблице атрибутов, скажем, в столбце 2, строке 2, используя pyqgis?
Ответы:
Чтобы перебрать все объекты слоя, используйте getFeatures()
генератор. Это возвращает итератор features ( QgsFeature
) в слое.
for feature in layer.getFeatures():
pass # do something with feature
Если вас интересует только определенная функция, а не все функции в слое, вы можете получить к ней доступ, используя a QgsFeatureRequest
и FID:
fid = 1 # the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)
Когда у вас есть QgsFeature
объект, вы можете использовать attributes()
метод для извлечения атрибутов (таких как столбцы или поля), связанных с этой функцией (также известных как строка), например:
# get the feature's attributes
attrs = feature.attributes()
# print the second attribute (note zero based indexing of Python lists)
print(attrs[1])
Если вы хотите проиндексировать поле по его имени, а не по номеру, вам нужно использовать сопоставления полей:
idx = layer.fieldNameIndex('name')
print(feature.attributes()[idx])
Индекс поля не должен изменяться во время цикла, поэтому его нужно вызывать только один раз.
Больше информации и примеров в кулинарной книге PyQGIS: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer
Обновить
Вы можете получить доступ атрибуты функций гораздо проще, используя QgsFeature
подобно dict
, например ,
for feature in layer.getFeatures():
name = feature["name"]
Я не уверен, какая версия пришла или всегда была там.
Я подумал, что на самом деле я добавил бы некоторый код, поскольку поиск этой проблемы возвращает этот вопрос ... большинство людей предпочитают быстрое объяснение или фрагмент кода ссылке, которая ведет на страницу, которая содержит много дополнительной информации.
Чтобы получить информацию в таблице, вам сначала нужно получить доступ к функциям слоя . В моем случае я поместил функции в переменную. Затем вы перебираете объекты , и для каждого объекта вы вызываете его атрибуты , которые затем можно распечатать, используя их индекс столбца . Например, если я хотел бы получить все значения во втором столбце, я бы сделал это:
lyr = iface.activeLayer()
features = lyr.getFeatures()
for feat in features:
attrs = feat.attributes()
print attrs[1]
Ответы выше показывают только, как это сделать для активного слоя. Я думаю, во многих случаях вам может понадобиться найти указанный атрибут для слоя, который не является активным слоем, или слой, отмеченный в окне «Слои». Приведенный ниже код получит список всех слоев, которые вы добавили в окно слоев (независимо от того, отмечены они или активны), и найдет атрибут в строке 2, столбец 2.
from qgis.core import QgsProject
layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
value = layer.getFeature(2).attribute(2)
Примечание. MapLayersByName возвращает список слоев с указанным именем. Я предполагаю, что один существует для этого примера.