How does one get a list of attributes/field names of a layer by means of PyQGIS 3?
If my layer has field names seen in the attribute table or properties. How can I use PyQGIS to give me a string list of these field names?
-
6The question is pretty clear.Kadir Şahbaz– Kadir Şahbaz2020年02月25日 00:26:46 +00:00Commented Feb 25, 2020 at 0:26
-
2I asked a question in order to create a useful resource for others with the same question. The code attempt (and solution) is in the answer.grego– grego2020年03月03日 22:49:06 +00:00Commented Mar 3, 2020 at 22:49
3 Answers 3
To get field names with fields()
method or other field properties (length
, type
, comment
, ...) you can use:
field_names = [field.name() for field in layer.fields()]
# ['id', 'attr1', 'attr2', 'attr3']
If you just need names, it's sufficient to use:
field_names = layer.fields().names()
# ['id', 'attr1', 'attr2', 'attr3']
List field names with dataProvider()
method
from qgis.utils import iface
# get active layer if not already set
layer = iface.activeLayer()
prov = layer.dataProvider()
field_names = [field.name() for field in prov.fields()]
for count, f in enumerate(field_names):
print(f"{count} {f}")
Note: using layer.pendingFields()
doesn't seem to work in QGIS 3. See this thread for more details: AttributeError: 'QgsVectorLayer' object has no attribute 'pendingFields'
This fails:
field_names = [field.name() for field in vlayer.pendingFields()]
Another approach is to use the attributeAliases()
method:
Returns a map of field name to attribute alias.
from qgis.utils import iface
layer = iface.activeLayer()
field_names = list(layer.attributeAliases().keys())
Note: the resulting list won't be sorted as fields represented in the attribute table.
It is necessary to apply the .keys()
, because the result of attributeAliases()
is a dictionary
print (True) if isinstance(layer.attributeAliases(), dict) else False