Answers:
要遍历图层中的每个要素,请使用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
像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返回具有给定名称的图层列表。我假设此示例存在一个。