4 votos

Por qué puede ' t multiplicar dos campos de cadena en la calculadora de campo convirtiéndolas en int() y float()

Estoy usando ArcGIS 10 y de nuevo en el lenguaje de programación python. Tengo un campo de cadena de caracteres que necesito para calcular multiplicando otros dos campos de cadena. Puedo hacerlo en python utilizando dos valores arbitrarios...

CINPT1 = "1.00"
CNETVAL = "8500"

print int(float(CINPT1) * int(CNETVAL))

pero...necesito esto como una arcpy fieldcalculation. Lo que tengo ahora es el siguiente. Estoy tratando básicamente de lo que está por encima: el CNETVAL campo debe ser igual a CINPT1 * CUNITV

import arcpy, sys, string, os

MAPCHAR = "MAPCHAR"
CINPT1 = "CINPT1"
CNETVAL = "CNETVAL"
CUNITV = "CUNITV"

expression = "multiStringFunc(!CNETVAL!)"
codeblock = """def multiStringFunc(netvalue):
    value1 = float(CINPT1)
    unitvalue = int(CUNITV)
    netvalue = int(value1 * unitvalue)

    return netvalue"""

# Process: CUNITV = CINPT1 * CUNITV
arcpy.CalculateField_management(MAPCHAR, CINPT1, expression, "Python", codeblock)

¿Qué recibo a cambio es "global nombre de 'CINPT1' no está definido". Soy bastante nuevo en el uso de python, así que no sé si estoy usando el valor incorrecto en el codeblock o yo estoy totalmente apagado. Cualquier cosa que usted puede aportar se agradece. Gracias!

6voto

Prachur Puntos 111

Sus entradas están siendo definidos como cadenas, no los nombres de campo, por lo tanto, en lugar de pasar el valor del campo "CINPT1" a tu código, pasando la cadena "CINPT1". Necesita una Actualización de Cursor para obtener los valores de campo y de paso QUE en su cálculo en lugar de una cadena.

El código debe ser algo como esto:

import arcpy

inputFeature = r'C:\YourFeatureLocation'

rows = arcpy.UpdateCursor(inputFeature)
for row in rows:
    row.CNETVAL = row.CINPT1 * row.CUNITV
    rows.updateRow(row)

del row, rows

Mis disculpas si esto no va muy bien, estoy que no tienen acceso a arcpy para la prueba ahora mismo. Este es el concepto que se debe perseguir.

En una nota de lado, el error que usted está consiguiendo parece ser un problema de alcance. Se define una función de python "codeblock" fuera de su actual código de python si que tiene sentido.... este bloque de código no tiene acceso a las variables que se definen fuera de ella.

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