Sütun 2, satır 2'de pyqgis kullanarak özellik tablosunda yer alan bilgileri almanın yolu nedir?
Sütun 2, satır 2'de pyqgis kullanarak özellik tablosunda yer alan bilgileri almanın yolu nedir?
Yanıtlar:
Katmandaki her özelliğin üzerinden geçmek için getFeatures()
jeneratörü kullanın . Bu QgsFeature
, katmandaki özelliklerin ( ) yinelemesini döndürür .
for feature in layer.getFeatures():
pass # do something with feature
Katmandaki tüm özelliklerin yerine yalnızca belirli bir özellikle ilgileniyorsanız, a QgsFeatureRequest
ve FID'sini kullanarak buna erişebilirsiniz :
fid = 1 # the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)
Bir QgsFeature
nesneye attributes()
sahip olduğunuzda, söz konusu özellikle (aka satır) ilişkilendirilmiş nitelikleri (diğer adıyla sütunlar veya alanlar) almak için yöntemi kullanabilirsiniz , örneğin:
# get the feature's attributes
attrs = feature.attributes()
# print the second attribute (note zero based indexing of Python lists)
print(attrs[1])
Alanı sayı yerine adıyla dizine eklemek istiyorsanız alan eşlemelerini kullanmanız gerekir:
idx = layer.fieldNameIndex('name')
print(feature.attributes()[idx])
Alan dizini döngü sırasında değişmemelidir, bu nedenle yalnızca bir kez çağırmanız gerekir.
PyQGIS yemek kitabında daha fazla bilgi ve örnek bulunmaktadır: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer
Güncelleme
QgsFeature
Benzer özelliklere kullanarak özellik özelliklerine çok daha kolay erişebilirsiniz dict
;
for feature in layer.getFeatures():
name = feature["name"]
Hangi sürümün geldiğinden veya her zaman orada olup olmadığından emin değilim.
Aslında bu sorunu googling bu soruyu döndürür gibi bazı kod eklemek düşündüm ... çoğu insan çok fazla ek bilgi içeren bir sayfaya götüren bir bağlantıya hızlı bir açıklama veya bir kod snippet'i tercih eder.
Bir tablodaki bilgileri almak için önce katmanın özelliklerine erişmeniz gerekir . Benim durumumda özellikleri bir değişkene koydum. Sonra özellikleri aracılığıyla döngü ve her özellik için onun özelliklerini çağrı daha sonra kullanılarak basılabilir, sütun indeksi . Örneğin, ikinci sütundaki tüm değerleri almak istiyorsanız, bunu yapardım:
lyr = iface.activeLayer()
features = lyr.getFeatures()
for feat in features:
attrs = feat.attributes()
print attrs[1]
Yukarıdaki yanıtlar yalnızca bunun etkin katman için nasıl yapılacağını gösterir. Birçok durumda etkin katmanlar veya Katmanlar penceresinde kontrol edilen bir katman olmayan bir katman için adı geçen özniteliği bulmak isteyebilirsiniz. Aşağıdaki kod, Katmanlar pencerenize eklediğiniz tüm katmanların bir listesini alır (işaretlenmiş veya etkin olup olmadıklarına bakılmaksızın) ve özniteliği satır 2, sütun 2'de bulur.
from qgis.core import QgsProject
layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
value = layer.getFeature(2).attribute(2)
Not mapLayersByName, verilen ada sahip katmanların bir listesini döndürür. Ben bu örnek için var olduğunu varsayıyorum.