Який спосіб отримати інформацію, що міститься в таблиці атрибутів, скажімо, у колонці 2, рядок 2, використовуючи pyqgis?
Який спосіб отримати інформацію, що міститься в таблиці атрибутів, скажімо, у колонці 2, рядок 2, використовуючи pyqgis?
Відповіді:
Для циклічного перегляду кожної функції в шарі використовуйте getFeatures()
генератор. Це повертає ітератор функцій ( QgsFeature
) у шарі.
for feature in layer.getFeatures():
pass # do something with feature
Якщо вас цікавить лише певна функція, замість усіх функцій у шарі, ви можете отримати до неї доступ за допомогою 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
подібним a 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 повертає список шарів із заданим іменем. Я припускаю, що існує один для цього прикладу.