我有一个脚本,可以根据物种领域(和其他一些领域)对植被进行分类。我发现原始数据集中有一个错误,导致一些记录被错误分类。我在代码中编写了一个部分,以便在分类发生后查找这些记录(因为它们将在一段时间内无法修复原始图层)。基本上,我试图选择那些带有NS且Fornon不为20的记录。我正在ArcGIS中将脚本作为脚本工具运行,并不断出现语法错误。有时候,小事情让我很烦,就像格式化。关于如何解决此问题或替代工作流程的任何建议将不胜感激
试图进行选择并保存表达式并将其复制到代码中,但是格式有所不同。我在Windows 7 64位系统上使用ArcGIS 10.2.2。我使用IDLE编辑脚本,然后将其加载到ArcGIS中的脚本工具
arcpy.AddMessage('> Finding Norway Spruce plantations that do not have a fornon of 20 ...')
shapefileFC = comb_raster
where_fornon1 = ("species" = 'NS04BS02WS02BF02' or "species" = 'NS05BS05' or "species" = 'NS05RS05' or "species" = 'NS06BS02BF02' or "species" = 'NS06BS03WS01' or "species" = 'NS06BS04' or "species" = 'NS06RS03BF01' or "species" = 'NS06TL03BS01' or "species" = 'NS06WS04' or "species" = 'NS07BS03' or "species" = 'NS07RS03' or "species" = 'NS07WS03' or "species" = 'NS08BF02' or "species" = 'NS08BS01BF601' or "species" = 'NS08BS02' or "species" = 'NS08RP02' or "species" = 'NS08RS01BF01' or "species" = 'NS08TL01BS01' or "species" = 'NS09BF01' or "species" = 'NS09BS01' or "species" = 'NS09RS01' or "species" = 'NS09WS01' or "species" = 'NS10' and TargetMap+'_fornon' != '20')
fields = ('L06', 'species')
# row id: 0 1
with arcpy.da.UpdateCursor(shapefileFC, fields, where_fornon1) as Cursor:
for row in Cursor:
SPECIES = row[1]
if len(SPECIES) < 4:
row[0] = 'No species data'
else:
if Spp(ex_) >= 10:
if Spp(ns_) >= 50:
row[0] ='NS plt'
else:
row[0] ='Unk plt'
我希望它将选择所有这些错误记录,并将“ NS plt”写入L06字段。这样,即使它被错误分类,我们也可以捕获并修复它。
答案 0 :(得分:0)
我认为where_fornon1是一个SQL,其中clase并且需要为字符串。
也许尝试
where_fornon1 = """( "species" = 'value1' or .... )"""
否则python会尝试将其评估为python代码,这肯定会给您语法错误,因此,您会遇到语法错误也就不足为奇了。您可能还需要删除species
字段周围的双引号,因为我不知道那是否是有效的sql。