5 votos

¿Cómo utilizar la función Replace en un script?

Me gustaría utilizar Sustituir en un modelo de QGIS pero no funciona como deseo. Estaba trabajando con la brillante solución de Joseph (usando un script personalizado en un modelo) pero no pude encontrar cómo reemplazar un carácter específico en un campo. Me gustaría reemplazar cada '\ ~ en Fromfield con '/' y escribir el resultado en Tofield. He intentado esto y algunas cosas más, pero nada:

##Test=name
##Layer=vector
##Tofield=Field Layer
##Fromfield=Field Layer

from qgis.core import QgsExpression

layer = processing.getObject(Layer)  
layer.startEditing()

idx = layer.fieldNameIndex(Tofield)
g= str(Fromfield)
e = QgsExpression(g.replace("\\","/"))
e.prepare(layer.pendingFields())

for f in layer.getFeatures():
    f[idx] = e.evaluate(f)
    layer.updateFeature(f)

layer.commitChanges()

¿Es esto posible?

5voto

wojo Puntos 1707

Debe utilizar la misma sintaxis que en la calculadora de campos de QGIS (FC). Desde python hay que hacer un pequeño hack. La función de trabajo en FC es:

replace("from_field", '\\' , '/')

Desde python, utilizando QgsExpression , se escapará dos veces el carácter de la barra invertida, por lo que la nueva función se convierte en

'replace("' + Fromfield + '", \'\\\\\' ,\'/\')'

Su código debería funcionar como sigue:

from qgis.core import QgsExpression

layer = processing.getObject(Layer)  
layer.startEditing()

idx_to = layer.fieldNameIndex(Tofield)
e = QgsExpression(u'replace("' + Fromfield + '", \'\\\\\' ,\'/\')')
e.prepare(layer.pendingFields())

for f in layer.getFeatures():
    f[idx_to] = e.evaluate(f)
    layer.updateFeature(f)

layer.commitChanges()

Además, aquí puedes usar sólo python, sin la API de QGIS, con el siguiente código:

layer = processing.getObject(Layer)  
layer.startEditing()

idx_to = layer.fieldNameIndex(Tofield)
idx_from = layer.fieldNameIndex(Fromfield)

for f in layer.getFeatures():
    f[idx_to] = f[idx_from].replace('\\' ,'/')
    layer.updateFeature(f)

layer.commitChanges()

Espero que esto ayude.

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