I've created a point-data feature class (fc) containing data from a simple .txt file using ArcPy as follows:
arcpy.CreateFeatureclass_management(out_path= outPath, out_name= 'fcTest', geometry_type= "POINT", spatial_reference= spatRef, has_m= m, has_z= z)
I've read the text file to create fields and fill each field with data:
#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)
Let's say the .txt file contains the xy coordinates and two fields: fA and 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)
So far so good. However, some values of fA and fB have value 9999, which actually means 'no data'.
How do I convert the 9999 values to a 'real' NoData value?
I thought
setNull(field_name)
might be it, but I can't get it to work. See ArcGIS help here. I tried something like:
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
Which gives:
'list' object has no attribute 'setNull'
I'm new to ArcPy and have based most of the above on the Programming ArcGIS10.1 with Python Cookbook by E. Pimpler.
This works flawlessly:
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