尝试根据输入通过属性脚本创建一个简单的 select

Trying to create a simple select by attribute script based on an input

尝试通过属性脚本创建一个简单的 select,该脚本将 select 基于工具中的输入,在 ARC 工具箱中。我的数据存储在名为 "Control" 的要素数据集中的文件数据库中,要素 Class 称为 "Monuments"。字段名为 "Township".

这是代码

# Select Features base on Township

import arcpy 

mxd = arcpy.mapping.MapDocument("CURRENT")

Monuments = arcpy.mapping.ListLayers(mxd, "Monuments") [0]

TWN = arcpy.GetParameterAsText(0)

arcpy.SelectLayerByAttribute_management(Monuments, "NEW_SELECTION", "Monuments.Township" = TWN)

但是收到错误消息。 "Keyword can't be an expression."

任何想法...提前致谢。

简答

arcpy.SelectLayerByAttribute_management(Monuments, "NEW_SELECTION", "Monuments.Township = '" + TWN + "'")

解释

你试过的方式基本是这样的:

whereClause = "Monuments.Township" = TWN
arcpy.SelectLayerByAttribute_management(Monuments, "NEW_SELECTION", whereClause)

如果您理解 Python,您会发现 whereClause = "Monuments.Township" = TWN 不是有效的语法。您不能为 "Monuments.Township" 赋值,这是您的代码尝试执行的操作。同样,您不能将 "Monuments.Township" = TWN 作为参数传递。相反,您必须构建一个字符串,如下所示:"Monuments.Township = '" + TWN + "'"。这是有效的语法,如下所示:

whereClause = "Monuments.Township = '" + TWN + "'"
arcpy.SelectLayerByAttribute_management(Monuments, "NEW_SELECTION", whereClause)

我上面的简短回答用一行代码而不是两行代码完成了同样的事情。

(我向 Python 人道歉,他们可能会给出更准确的解释。)