Cách để có được thông tin trong bảng thuộc tính, giả sử trong cột 2, hàng 2 bằng pyqgis là gì?
Cách để có được thông tin trong bảng thuộc tính, giả sử trong cột 2, hàng 2 bằng pyqgis là gì?
Câu trả lời:
Để lặp qua mọi tính năng trong một lớp, hãy sử dụng trình getFeatures()
tạo. Điều này trả về một iterator của các tính năng ( QgsFeature
) trong lớp.
for feature in layer.getFeatures():
pass # do something with feature
Nếu bạn chỉ quan tâm đến một tính năng cụ thể, thay vì tất cả các tính năng trong lớp, bạn có thể truy cập nó bằng cách sử dụng QgsFeatureRequest
và đó là FID:
fid = 1 # the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)
Khi bạn có một QgsFeature
đối tượng, bạn có thể sử dụng attributes()
phương thức để truy xuất các thuộc tính (còn gọi là cột hoặc trường) được liên kết với tính năng đó (còn gọi là hàng), ví dụ:
# get the feature's attributes
attrs = feature.attributes()
# print the second attribute (note zero based indexing of Python lists)
print(attrs[1])
Nếu bạn muốn lập chỉ mục trường theo tên của nó, thay vì số, bạn cần sử dụng ánh xạ trường:
idx = layer.fieldNameIndex('name')
print(feature.attributes()[idx])
Chỉ mục trường không nên thay đổi trong vòng lặp, vì vậy bạn chỉ cần gọi nó một lần.
Có nhiều thông tin và ví dụ trong sách dạy nấu ăn PyQGIS: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer
Cập nhật
Bạn có thể truy cập các thuộc tính tính năng dễ dàng hơn nhiều bằng cách sử dụng QgsFeature
như dict
, ví dụ:
for feature in layer.getFeatures():
name = feature["name"]
Tôi không chắc phiên bản nào xuất hiện hoặc nếu nó luôn ở đó.
Tôi nghĩ rằng tôi thực sự sẽ thêm một số mã, vì việc giải quyết vấn đề này trả về câu hỏi này ... hầu hết mọi người thích một lời giải thích nhanh hoặc một đoạn mã cho một liên kết dẫn đến một trang có nhiều thông tin bổ sung.
Để có được thông tin trong bảng, trước tiên bạn phải truy cập các tính năng của lớp . Trong trường hợp của tôi, tôi đặt các tính năng trong một biến. Sau đó, bạn lặp qua các tính năng và với mỗi tính năng bạn gọi các thuộc tính của nó , sau đó có thể được in bằng chỉ mục cột của chúng . Ví dụ: nếu tôi muốn nhận tất cả các giá trị trong cột thứ hai, thì tôi sẽ làm điều này:
lyr = iface.activeLayer()
features = lyr.getFeatures()
for feat in features:
attrs = feat.attributes()
print attrs[1]
Các câu trả lời ở trên chỉ cho thấy cách làm điều này cho lớp hoạt động. Tôi nghĩ rằng, trong nhiều trường hợp, bạn có thể muốn tìm thuộc tính đã nói cho một lớp không phải là lớp hoạt động hoặc lớp được kiểm tra trong cửa sổ Lớp. Mã dưới đây sẽ nhận được một danh sách tất cả các lớp mà bạn đã thêm vào cửa sổ Lớp của mình (bất kể chúng được kiểm tra hay kích hoạt) và tìm thuộc tính ở hàng 2, cột 2.
from qgis.core import QgsProject
layer = QgsProject.instance().mapLayersByName("myLayerName")[0]
value = layer.getFeature(2).attribute(2)
Lưu ý mapLayersByName trả về danh sách các lớp có tên đã cho. Tôi giả sử một người tồn tại cho ví dụ này.