5 votos

establecer valores en la tabla de atributos de clase de entidad en nulo

He creado un punto de datos featureclass (fc) que contiene los datos de un simple .archivo txt utilizando Arcpy de la siguiente manera:

arcpy.CreateFeatureclass_management(out_path= outPath, out_name= 'fcTest', geometry_type= "POINT", spatial_reference= spatRef, has_m= m, has_z= z)

He leído el archivo de texto para crear campos y llenar cada campo con los datos:

#lstFields= data from the text file
#fNames= list of fieldnames
#fClass= list of datatypes
for i in range(len(fNames)):
    arcpy.AddField_management(fcTest, fieldN, fieldT)

Digamos que el .archivo txt que contiene las coordenadas xy y dos campos: fA y fB

with arcpy.da.InsertCursor('fcTest', ("SHAPE@XY", "fA", "fB")) as cursor: 
    for point in lstFields: 
        vals= point.split(";")
        x= float(vals[0])
        y= float(vals[1])
        a= int(vals[2])
        b= float(vals[3])
        rowValue= [(x, y), a, b]
        cursor.insertRow(rowValue)

Hasta ahora tan bueno. Sin embargo, algunos valores de fA y fB tiene valor 9999, que en realidad significa 'sin datos'. Mi pregunta es: ¿cómo hago para convertir el 9999 valores a un "verdadero" valor NoData? Pensé

setNull(field_name)

podría ser, pero no puedo conseguir que funcione. Ver ArcGIS ayuda aquí. He intentado algo como:

with arcpy.da.UpdateCursor('fcTest', ("fA", "fB")) as cursor:
    for row in cursor:
        for i in range(len(row)):
            if row[i] == 9999:
                row.setNull(row[i])
                cursor.updateRow(row)
except Exception as e:
    print e.message

Lo que da:

'list' object has no attribute 'setNull'

Agradecería cualquier ayuda. Soy nuevo en el arcpy y han basado la mayoría de los de arriba en la Programación ArcGIS10.1 con Python libro de cocina por E. Pimpler. Muchas gracias!

ACTUALIZACIÓN! Este funciona a la perfección:

with arcpy.da.UpdateCursor('fcTest', ("fA", "fB")) as cursor:
    for row in cursor:
        for i in range(len(row)):
            if row[i] == 9999:
                row[i] = None
                cursor.updateRow(row)
except Exception as e:
    print e.message

Gracias @Artwork21

9voto

Hameno Puntos 129

Has probado:

 if row[i] == 9999:
   row[i] = None
   cursor.updateRow(row)
 

2voto

aaronstacy Puntos 1704

también, el error original, creo que indica que setNull no es un método para arcpy.da.UpdateCursor, pero es un método para arcpy.UpdateCursor (no "da").

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