Python选择多个条件并正确设置格式?

时间:2019-01-30 19:01:28

标签: python where-clause

我有一个脚本,可以根据物种领域(和其他一些领域)对植被进行分类。我发现原始数据集中有一个错误,导致一些记录被错误分类。我在代码中编写了一个部分,以便在分类发生后查找这些记录(因为它们将在一段时间内无法修复原始图层)。基本上,我试图选择那些带有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字段。这样,即使它被错误分类,我们也可以捕获并修复它。

1 个答案:

答案 0 :(得分:0)

我认为where_fornon1是一个SQL,其中clase并且需要为字符串。

也许尝试

where_fornon1 = """( "species" = 'value1' or .... )"""

否则python会尝试将其评估为python代码,这肯定会给您语法错误,因此,您会遇到语法错误也就不足为奇了。您可能还需要删除species字段周围的双引号,因为我不知道那是否是有效的sql。