Python选择多个条件和正确的格式?

2024-04-24 13:52:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,它根据一个物种域(和一些其他域)对植被进行分类。我发现原始数据集中有一个错误,导致一些记录被错误分类。我正在代码中编写一个部分,以便在分类发生后查找这些记录(因为它们暂时不会修复原始层)。基本上,我正在尝试选择那些有NS的记录,但是它们的Fornon值不是20。我在ArcGIS中运行脚本作为一个脚本工具,并且不断出现语法错误。有时一些小事会把我搞得一团糟,就像格式化一样。任何关于如何解决这个或替代工作流程的建议将不胜感激

尝试进行选择,保存表达式并将其复制到代码中,但格式不同。我在Windows7 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字段。这样,即使它被错误分类,我们也可以抓住它并修复它


Tags: or工具代码脚本if错误记录分类
1条回答
网友
1楼 · 发布于 2024-04-24 13:52:59

我认为其中的fornon1是一个sql,其中clase和需要是一个字符串

也许试试

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

否则python会尝试将其作为python代码进行计算,这肯定会导致语法错误,因此出现语法错误也就不足为奇了。您可能还需要删除species字段周围的双引号,因为我不知道这是否是有效的sql

相关问题 更多 >