I found a couple of good answers like [here][1] for example, but I do not manage to adapt them and make them work... What i am trying to do: take the input, create new output with same fields, add a new field with values calculated from another field. For the moment, I managed to get the new values for the new field in a list: from collections import Counter as counter layer = qgis.utils.iface.activeLayer() features = layer.getFeatures() # find the index of the 'relict_id' field. idx = layer.fieldNameIndex('RELICT_ID') relict_id = [] for feat in features: attrs = feat.attributes() relict_id.append(attrs[idx]) relict_id_new = [x for x in relict_id] c = counter(relict_id) idx = 0 while idx in range(len(relict_id)): rel_id = relict_id[idx] if c[rel_id] != 1: for x in range(c[rel_id]): relict_id_new[idx+x] = '{}_{}'.format(relict_id[idx],x) idx += c[rel_id] else: idx +=1 I would like now to adapt this [answer][1], but all I get is a bunch of errors. I tried to get rid off *Processings* since it does not seem to work for me (QGIS 2.18.2). I am not understanding pretty well the implication of the processes, I do not know if it is the good way to do it and what are the problems. Here is the code for creating the new shapefile and new field: ##testes=group ##Ratio =name ##layer=vector ##output_file=output vector from PyQt4.QtCore import QVariant, QFileInfo from qgis.core import QGis, QgsFeature, QgsField, QgsFields, QgsProject import processing layer= iface.activeLayer().dataProvider().dataSourceUri() layer = path[:path.rfind('|')] mylayer = QgsVectorLayer(layer, "inventaris_points_in_roi_single_new", "ogr") if not mylayer.isValid(): print("Layer failed to load!") vectorLayer = processing.getObject(mylayer) provider = vectorLayer.dataProvider() New_layer= processing.getObject(layer) fields = QgsFields() fields = provider.fields() fields.append(QgsField('AREA', QVariant.Double,'',20,3)) fields.append(QgsField('PERIMETER', QVariant.Double,'',20,3)) fields.append(QgsField('RATIO', QVariant.Double,'',20,3)) writer = processing.VectorWriter(output_file, None, fields.toList(), QGis.WKBMultiPolygon, New_layer.crs()) features = processing.features(vectorLayer) for feat in features: writer.addFeature(feat) del writer And the error : Traceback (most recent call last): File "<input>", line 1, in <module> File "c:/users/hocquetfp/appdata/local/temp/tmp_oajpe.py", line 18, in <module> vectorLayer = processing.getObject(mylayer) File "C:/Program Files/QGIS 2.18/apps/qgis/./python/plugins\processing\tools\dataobjects.py", line 216, in getObject ret = getObjectFromUri(uriorname) File "C:/Program Files/QGIS 2.18/apps/qgis/./python/plugins\processing\tools\dataobjects.py", line 244, in getObjectFromUri if normalizeLayerSource(layer.source()) == normalizeLayerSource(uri): File "C:/Program Files/QGIS 2.18/apps/qgis/./python/plugins\processing\tools\dataobjects.py", line 222, in normalizeLayerSource source = source.replace('\\', '/') AttributeError: 'QgsVectorLayer' object has no attribute 'replace' And of course, make the link between the two codes. [1]: https://gis.stackexchange.com/questions/208372/creating-new-layer-from-another-one-and-adding-new-fields-with-qgis-processing-p