[GIS] Add Values to New Column in Attributes Table using Python Console in QGIS

pyqgisqgisqgis-processing

I've added a new column to my table called "STRNAME" using:

path = "/Users/shapefiles/roads/"
metro_roads = QgsMapLayerRegistry.instance().mapLayersByName('Metro_roads')[0]
processing.runalg('qgis:addfieldtoattributestable', metro_roads, 'STRNAME', 2, 20, 0, path+"Metro_roads_new.shp")

Now I want to populate the new column with values. But I've looked for a processing algorithm (similar to "qgis.addfieldtoattributestable') and can't find one.

How can I add values to a table column from the Python Console?

Best Answer

You can actually do both (add a field and write values in it) using a single QGIS Processing algorithm:

processing.runalg('qgis:fieldcalculator', metro_roads, 'STRNAME', 2, 20, 0, True, "concat('This is row # ', $rownum)", path+"Metro_roads_new.shp")

This is what each parameter means:

processing.runalg('qgis:fieldcalculator', input_layer, field_name, field_type, field_length, field_precision, new_field, formula, output_layer)

If you want to add values for a field that was already added, just change the new_field parameter to False:

processing.runalg('qgis:fieldcalculator', metro_roads_new, 'STRNAME', 2, 20, 0, False, "concat('This is row # ', $rownum)", path+"Metro_roads_new_2.shp")