回答:
レイヤー内のすべてのフィーチャをループするには、getFeatures()
ジェネレーターを使用します。これは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"]
どのバージョンが入ったのか、それが常にあったのかはわかりません。
この問題をグーグルで検索するとこの質問が返されるので、実際にコードを追加すると思います...ほとんどの人は、多くの追加情報を含むページにつながるリンクよりも簡単な説明またはコードスニペットを好みます。
テーブルの情報を取得するには、まずレイヤーの機能にアクセスする必要があります。私の場合、機能を変数に入れました。次に、機能をループし、機能ごとに属性を呼び出します。属性は、列インデックスを使用して印刷できます。たとえば、2番目の列のすべての値を取得する場合は、次のようにします。
lyr = iface.activeLayer()
features = lyr.getFeatures()
for feat in features:
attrs = feat.attributes()
print attrs[1]
上記の回答は、アクティブレイヤーに対してこれを行う方法のみを示しています。多くの場合、アクティブなレイヤーではないレイヤーまたはレイヤーウィンドウでチェックされているレイヤーの属性を見つけたいと思うでしょう。以下のコードは、Layersウィンドウに追加したすべてのレイヤーのリストを取得し(チェックされているかアクティブであるかに関係なく)、行2、列2で属性を見つけます。
from qgis.core import QgsProject
layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
value = layer.getFeature(2).attribute(2)
注mapLayersByNameは、指定された名前のレイヤーのリストを返します。私はこの例のために存在すると仮定しています。