It is simpler than with version 1.8:
layer = qgis.utils.iface.activeLayer()
fields = layer.pendingFields()
field_names = [field.name() for field in fields]
or in one line
field_names = [field.name() for field in layer.pendingFields() ]
an after
for elem in layer.getFeatures():
print dict(zip(field_names, elem.attributes()))
{u'adip': 17, u'dipdir': 130, u'tdip': 29}
{u'adip': 55, u'dipdir': 325, u'tdip': 75}
.....
Generally to explore a new function, I use the dir() or the see module to examine what's inside:
dir(fields)
['FieldOrigin', 'OriginEdit', 'OriginJoin', 'OriginProvider', 'OriginUnknown', '__class__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__len__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'append', 'at', 'clear', 'count', 'extend', 'field', 'fieldOrigin', 'fieldOriginIndex', 'indexFromName', 'isEmpty', 'remove', 'size', 'toList']
or
see(fields)
[] hash() help() len()
repr() str() .FieldOrigin() .OriginEdit
.OriginJoin .OriginProvider .OriginUnknown .append()
.at() .clear() .count() .extend()
.field() .fieldOrigin() .fieldOriginIndex()
.indexFromName() .isEmpty() .remove() .size()
.toList()
And you can see that there is a field() function
so
print fields.field(0)
qgis.core.QgsField object at 0x163E39C0
and a field has a name, a type, a precision,...:
see(fields.field(0))
< <= == != >
>= hash() help() repr()
str() .comment() .displayString() .length()
.name() .precision() .setComment() .setLength()
.setName() .setPrecision() .setType() .setTypeName()
.type() .typeName()
so:
fields.field(0).name()
u'adip'
fields.field(0).type()
2
fields.field(0).typeName()
u'Integer'
fields.field(0).precision()
0
....
with .dataProvider()
It is .field()
....
prov = layer.dataProvider()
prov.fields().field(0).name()
u'adip'
prov.fields().field(0).typeName()
u'Integer'
and
field_names = [field.name() for field in prov.fields()]
Method 1 - New Memory Layer plugin
With some steps, you can create a memory layer from your selection.
- Install New Memory Layer plugin;
- Add a new memory layer into your project in Layer > New > New Memory Layer;
- Select the same geometry type and CRS as your original layer;
- Make your original layer active, create your desired selection and copy the features (Edit > copy features or CTRL+C);
- Make your memory layer active and editable;
- Add the necessary new attributes with the same name and type as the original layer
- Paste the features (Edit > paste features or CTRL+V)
Method 2 - Using Processing toolbox (> QGIS 2.2)
Using processing toolbox, this is pretty straightforward.
- Make your original layer active, create your desired selection;
- If it's not yet done, open Processing toolbox in Processing > Toolbox;
- Find the "Save selected features (QGIS algorithms > Vector general tools);
- Use your original layer as input and leave the "Save as temporary layer" as output.
Note: Beware that all temporary or memory layers will be lost if the project is closed. So make sure to save them before you do.
Best Answer
Not sure if this is the exact answer you want it wouldnt be exporting the aliases directly but you can do this: