Skip to content

Latest commit

 

History

History
104 lines (79 loc) · 2.87 KB

How to get field names in pyqgis 2.0.md

File metadata and controls

104 lines (79 loc) · 2.87 KB

From How to get field names in pyqgis 2.0

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()]