1 votos

Dividir valor de atributo e insertar datos en columnas en QGIS usando Python

Estoy tratando de separar un valor de cadena de un campo y luego ponerlo en su campo releated.

El nombre del campo son caracteres de la cadena y su valor es el número.

"Campo"=PT 100BC 20cd 19 es el valor de la cadena

PT= 100, BC=20 cd=19.

la cadena es irregular.

los nombres de las columnas son los caracteres de la cadena y el número es el valor asociado a ella.

Hasta ahora lo he hecho.

from qgis.core import *
import qgis.utils

inlayer=iface.activeLayer()

inlayer.selectByExpression('"TRTMTHD1"=\'PLANT\'or "TRTMTHD1"=\'NATURAL\' ')
selection=inlayer.selectedFeatures()

for s in selection:
    d=(sl.split() for sl in s)

Si hacen la división el resultado es PT, 100BC, 20CD que no quiero.

¿Qué comando utilizo para dividir el valor en la columna de campo y luego actualizar el registro?

Después de ejecutar este

{from qgis.core import * importar qgis.utils

layer=iface.activeLayer() fc=capa.featureCount() f_list=[] for i in range(0,fc): feat=layer.getFeature(i) f_list.append(feat['SPCOMP'])

field_list=[] for f in capa.campos(): if len(f.name())==2: field_list.append(f.name())

layer.selectByExpression('"TRTMTHD1"='PLANTA'o "TRTMTHD1"='NATURAL\'' ') selection=layer.selectedFeatures()

f if cadena!=Ninguna: for fn in lista_campos: cadena=cadena.replace(fn,',' + fn)

list_of_field_values=(string.split(',') for string in f_list)
for fvl in list_of_field_values:
    if fvl !='':
        fd,vl=fvl.split(' ')
        print('field=',fd,'value=',vd)}

I get AttributeError: 'list' object has no attribute 'split'

0voto

Mr. Che Puntos 356
# splitting the string
list_of_fieldnames = ['PT', 'BC', 'cd', 'f1', 'f2', 'f3']

string1 = 'PT 100BC 20cd 19'
string2 = 'f3 3f1 1PT 100cd 19'

for string in [string1, string2]:
    for field in list_of_fieldnames:
        string = string.replace(field, ',' + field)

    list_of_fields_and_values = string.split(',')
    print(list_of_fields_and_values)
    for field_and_value in list_of_fields_and_values:
        if field_and_value != '':
            field, value = field_and_value.split(' ')
            print('field=', field, 'value=', value)

# update field value
# the layer is qgis.core.QgsVectorLayer
# https://qgis.org/pyqgis/3.6/core/QgsVectorLayer.html

layer.startEditing()
# check fid, field, newValue parameters at https://qgis.org/pyqgis/3.6/core/QgsVectorLayer.html#qgis.core.QgsVectorLayer.changeAttributeValue
layer.changeAttributeValue(fid, field, newValue)
layer.commitChanges()

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