Wie erhält man die in der Attributtabelle enthaltenen Informationen, z. B. in Spalte 2, Zeile 2, mit pyqgis?
Wie erhält man die in der Attributtabelle enthaltenen Informationen, z. B. in Spalte 2, Zeile 2, mit pyqgis?
Antworten:
Verwenden Sie den getFeatures()
Generator, um alle Features in einer Ebene zu durchlaufen. Dies gibt einen Iterator von features ( QgsFeature
) in der Ebene zurück.
for feature in layer.getFeatures():
pass # do something with feature
Wenn Sie sich nur für ein bestimmtes Feature interessieren, können Sie statt für alle Features in der Ebene mit a QgsFeatureRequest
und FID darauf zugreifen :
fid = 1 # the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)
Sobald Sie ein QgsFeature
Objekt haben, können Sie die attributes()
Methode verwenden, um die Attribute (auch als Spalten oder Felder bezeichnet) abzurufen, die mit dieser Funktion (auch als Zeile bezeichnet) verknüpft sind. Beispiel:
# get the feature's attributes
attrs = feature.attributes()
# print the second attribute (note zero based indexing of Python lists)
print(attrs[1])
Wenn Sie das Feld nach seinem Namen anstatt nach einer Zahl indizieren möchten, müssen Sie die Feldzuordnungen verwenden:
idx = layer.fieldNameIndex('name')
print(feature.attributes()[idx])
Der Feldindex sollte sich während der Schleife nicht ändern, sodass Sie ihn nur einmal aufrufen müssen.
Weitere Informationen und Beispiele finden Sie im PyQGIS-Kochbuch: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer
Aktualisieren
Sie können auf Merkmalsattribute viel einfacher zugreifen, indem Sie QgsFeature
a verwenden dict
, z
for feature in layer.getFeatures():
name = feature["name"]
Ich bin mir nicht sicher, welche Version reinkam oder ob sie schon immer da war.
Dachte, ich würde tatsächlich Code hinzufügen, da das Durchsuchen dieses Problems diese Frage zurückgibt. Die meisten Leute bevorzugen eine kurze Erklärung oder einen Codeausschnitt zu einem Link, der zu einer Seite mit vielen zusätzlichen Informationen führt.
Um die Informationen in einer Tabelle zu erhalten, müssen Sie zuerst auf die Funktionen des Layers zugreifen . In meinem Fall habe ich die Features in eine Variable geschrieben. Anschließend durchlaufen Sie die Features und rufen für jedes Feature seine Attribute auf , die dann anhand ihres Spaltenindex gedruckt werden können . Wenn ich zum Beispiel alle Werte in der zweiten Spalte erhalten möchte, würde ich Folgendes tun:
lyr = iface.activeLayer()
features = lyr.getFeatures()
for feat in features:
attrs = feat.attributes()
print attrs[1]
Die obigen Antworten zeigen nur, wie dies für die aktive Ebene getan wird. Ich denke, in vielen Fällen möchten Sie das Attribut möglicherweise für eine Ebene suchen, die nicht die aktiven Ebenen ist, oder für eine Ebene, die im Ebenenfenster aktiviert ist. Der folgende Code zeigt eine Liste aller Ebenen an, die Sie Ihrem Ebenenfenster hinzugefügt haben (unabhängig davon, ob diese aktiviert oder aktiv sind). Das Attribut finden Sie in Zeile 2, Spalte 2.
from qgis.core import QgsProject
layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
value = layer.getFeature(2).attribute(2)
Hinweis mapLayersByName gibt eine Liste von Layern mit dem angegebenen Namen zurück. Ich gehe davon aus, dass eines für dieses Beispiel existiert.