3 votos

Cómo rellenar los campos con el nombre de la capa en PyQGIS

Tengo cientos de shapefiles que he añadido a un proyecto QGIS. Estoy usando QGIS 3.0.0. He creado un nuevo campo de texto para cada uno de ellos llamado 'Enumertr' en PyQGIS y necesito rellenar este campo en cada uno de los shapefiles con el nombre de la capa respectiva. Tengo el siguiente script, pero me da error. También necesito adaptarlo para iterar a través de todas las capas en mi proyecto QGIS. Soy relativamente nuevo en Python, pero espero que el uso de PyQGIS me ahorre una cantidad sustancial de tiempo si puedo finalizar este script.

from PyQt4.QtCore import QVariant
from qgis.core import QgsField, QgsExpression, QgsFeature
vl = iface.activeLayer()
vl.startEditing()
idx = vl.lookupField(‘Enumertr’)
e = QgsExpression (‘vl.name’)
e.prepare(vl.fields())
for f in vl.getFeatures():
    f[idx] = e.evaluate( f )
    vl.updateFeature( f )
vl.commitChanges()

3voto

Mue Puntos 2469

Podría utilizar algo como lo siguiente en el Consola Python :

for layer in QgsProject.instance().mapLayers().values():
    with edit(layer):
        for feature in layer.getFeatures():
            feature.setAttribute(feature.fieldNameIndex('Enumertr'), layer.name())
            layer.updateFeature(feature)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X