0

我正在尝试学习 python 并为 ArcGIS 10.1 编写 arcpy 脚本。

目标是检查各种字段的 -99 值,该值指定 NULL,然后用 0 值填充新添加的字段。代码运行......但是它用 6 值填充所有值。6 是问题的一部分,另一部分是我检查过的,表中应该只有 3 (-99) 个值。

下面是代码:

# Import arcpy module
import arcpy

print "start your engines"
# Script arguments
Shapefile = "C:\\gislab2\\Python\\take_home\\USCancer2000.shp"
#this is where the arcpy.userargument part goes, get from re-exporting model.
Field_Name = "Henry1"

Output_Feature_Class = "C:\\gislab2\\Python\\take_home\\USCancer2000.shp"

# Local variables:
USCancer2000__2_ = Output_Feature_Class

# Process: Add Field
arcpy.AddField_management(Shapefile, "Henry1", "LONG", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")

# Process: Calculate Field
arcpy.CalculateField_management(Output_Feature_Class, "Henry1", "5.5", "PYTHON_9.3", "")
##
### Process: If-then check for missing values
##
if "Cnt1"==-99:
    Field_name=0
elif "Cnt2"==-99:
    Field_name=0
elif "Cnt3"==-99:
    Field_name=0
elif "Pop1"==-99:
    Field_name==0
elif "Pop2"==-99:
    Field_name=0
elif "Pop3"==-99:
    Field_name=0
4

2 回答 2

4

Gabriel 的评论是有效的,但主要问题是您没有遍历要素类中的行 - 您不能只if "Cnt1" == -99期望 Python 知道它应该查看Cnt1要素类的每一行中的字段。

在这种情况下,您需要一个Update cursor,它将依次查看要素类的每一行,并允许您更新字段值。这样的事情应该让你感动:

fields = ['Cnt1','Cnt2','Cnt3','Pop1','Pop2','Pop3']

cursor = arcpy.UpdateCursor(Output_Feature_Class)
for row in cursor:
    for field in fields:
        if row.getValue(field) == -99:
            row.setValue(Field_Name, 0)
    cursor.updateRow(row)
于 2013-04-08T02:08:24.183 回答
3

您正在与代码中的常量进行比较。

是“Cnt1”==-99 ??

那永远不会是真的。

我不知道 Arcpy,但如果你想从它的函数中解析一些结果,你应该得到一些返回值或检查调用后作为参数传递的变量。

于 2013-04-05T14:52:17.110 回答