Python for ArcGIS - 使用文本字段作为参数计算字段

时间:2014-03-04 14:43:24

标签: python field arcgis arcpy

我正在尝试在属性表中创建和计算名为Score的字段。分数取决于另外两个领域,宽度和类别。宽度包含整数值,类别包含文本。分数字段应根据这两个字段的值分配多个点。

我能够根据Width的值编写一个Python脚本为SCORE赋值。但是,一旦我尝试添加Category作为参数,我不断收到错误消息,说明参数无效。

以下代码有效(仅限宽度):

expression = "getClass(float(!Width!))"
    codeblock = """def getClass(wd):
        if wd<=450:
            return 1
        elif wd>450 and wd<900:
            return 2
        else:
            return 3"""
 arcpy.AddField_management("featurelayer", "Score", "SHORT")

此代码包含类别作为参数但不起作用:

expression = "getClass(!Width!,!Category!)"
codeblock = """def getClass(wd,cat):
    if wd<=35:
        return 1
    elif wd<90 and cat=='RED':
        return 2
    else:
        return 3"""

arcpy.AddField_management("featurelayer", "Score", "SHORT")

谢谢!

***我确实尝试在第二个代码中转换两个参数 - 我为它们尝试了float(),以及类别的str(),因为它是一个文本字段。两个都没有工作,并且错误消息不是非常具体:“未能执行getClass()”

***类别字段已完全填充(“红色”或“蓝色”)

1 个答案:

答案 0 :(得分:0)

在ArcMap的字段计算器中使用表达式和代码块方法是必要的,但在编写Python脚本时则不需要。

Try an UpdateCursor instead.它更容易阅读,因此更容易调试。

arcpy.AddField_management("featurelayer", "Score", "SHORT")

updateFields = ["Width", "Category", "Score"]

with arcpy.da.UpdateCursor("featurelayer", updateFields) as cursor:
    for row in cursor:
        if row[0] <= 35:
            row[2] = 1
        elif row[0] < 90 and row[1] == 'RED':
            row[2] = 2
        else:
            row[2] = 3
        cursor.updateRow(row)