1 votos

Nombre del atributo en un nuevo campo como función del atributo en otro campo

Tengo una tabla con un campo que contiene nombres de atributos en otro idioma (oldname1, oldname2,...). Quiero crear un nuevo campo en el que pueda añadir (con calculadora de campo) el nombre traducido de cada atributo en mi idioma (newname1,newname1,...).

enter image description here

Pensé que el cursor sería la mejor manera de realizar esto. El campo original se llama campoA y el nuevo campoB

He probado con un cursor pero mi script no funciona. El error se da para la línea "if row in 'fieldA'= 'oldname1'

myTable = ":\\path to table"

cursor = arcpy.da.SearchCursor(myTable, ['fieldA', 'fieldB'])
for row in cursor:
    if row in 'fieldA'= "oldname"
    arcpy.CalculateField_management(myTable, 'fieldB',"newname1")
    elif...
    .....

He intentado añadir cursores para cada campo como variable antes del bucle:

fieldA= arcpy.da.SearchCursor(myTable, ['fieldA'])
fieldB= arcpy.da.SearchCursor(myTable, ['fieldB'])

Pero no ayuda. También intento escribir ['campoA'] en lugar de 'campoA'

¿Puedo crear variables para cada campo y utilizarlas en el cursor? o ¿tiene alguna idea de cómo podría solucionar esto?

1voto

omouse Puntos 129

Podría utilizar la función CalculateField o un UpdateCursor, para nombrar un atributo en un nuevo campo como función de un atributo en otro campo. Aquí hay 3 ejemplos:

import arcpy

arcpy.env.workspace = "D:/"

# example 1 with a dictonary
expression = "getNewName(!OldName!)"
codeblock = """
def getNewName(oldname):
    my_dictionary = {'Paul_old' : 'Paul_new',
                 'James_old' : 'James_new',
                 'Jane_old' : 'Jane_new'}
    return my_dictionary[oldname]"""

arcpy.CalculateField_management("MyTest.shp", "NewName", 
                                expression, "PYTHON", codeblock)

# example 2 with a string manipulation
expression = "getNewName(!OldName!)"
codeblock = """
def getNewName(oldname):
    return oldname.split('_')[0] + '_new'"""

arcpy.CalculateField_management("MyTest.shp", "NewName", 
                                expression, "PYTHON", codeblock)

# exmaple 3 with update cursor

fields = ['OldName', 'NewName']

with arcpy.da.UpdateCursor("MyTest.shp", fields) as cursor:
    for row in cursor:
        # example with a string manipulation, but could be anything
        # index of row correspond to the index of fields variable
        row[1] = row[0].split('_')[0] + '_new'
        cursor.updateRow(row)

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