Синтаксическая ошибка Python с arcpy UpdateCursor

Я новичок в python и хотел бы иметь скрипт, который просматривает класс объектов и сравнивает значения в двух текстовых полях, а затем заполняет третье поле Y или N в зависимости от того, совпадают ли значения или нет. Я думаю, мне нужно использовать UpdateCursor с оператором if. Я пробовал следующее, но получаю синтаксическую ошибку при попытке запустить его. Я использую ArcGIS 10.1 и знаю, что daCursor лучше, но я просто пытаюсь разобраться с курсорами и подумал, что пока попробую сделать его простым.

#import system modules
import  arcpy
from arcpy import env
import os
import sys


#set environment settings
working_fc = sys.argv[1]
working_gdb = os.path.split(working_fc)[0]


#use an update cursor to populate the field BEC_UPDATED based on the     result of a query 
#query = ("SELECT  * FROM working_fc" "WHERE [BEC_LABEL] = [BEC_V9]")
#if the query is true, then BEC_UPDATED should be popluated with "N"
#if the query is false, then BEC_UPDATED should be populated with "Y"

rows = arcpy.UpdateCursor (working_fc)
for row in rows:
    if row.getValue("BEC_LABEL") == row.getValue("BEC_V9")
    row.BEC_UPDATED = "N"
    else
    row.BEC_UPDATED = "Y"
    rows.updateRow(row)

 print "BEC_UPDATED field populated"

person user5755063    schedule 07.01.2016    source источник


Ответы (2)


Ваша синтаксическая ошибка вызвана отступом и отсутствием двоеточий. Python придирчив к этому, поэтому всегда проверяйте это, когда получаете синтаксическую ошибку.

rows = arcpy.UpdateCursor(working_fc)
for row in rows:
    if row.getValue("BEC_LABEL") == row.getValue("BEC_V9"):
        row.BEC_UPDATED = "N"
    else:
        row.BEC_UPDATED = "Y"
    rows.updateRow(row)

Изменение этого синтаксиса на da.UpdateCursor по сути то же самое, но требует, чтобы вы заранее указали интересующие вас атрибуты. Стоит потренироваться, потому что как только вы разберетесь с более сложными скриптами, вам станет легче :)

fieldList = ["BEC_LABEL", "BEC_V9", "BEC_UPDATED"]
with arcpy.da.UpdateCursor(working_fc, fieldList) as cursor:
    for row in cursor:
        if row[0] == row[1]:
            row[2] = "N"
        else:
            row[2] = "Y"
        cursor.updateRow(row)
person Erica    schedule 07.01.2016

Вы забыли двоеточие и отступ в блоке if:

rows = arcpy.UpdateCursor (working_fc)
for row in rows:
    if row.getValue("BEC_LABEL") == row.getValue("BEC_V9"):
        row.BEC_UPDATED = "N"
    else:
        row.BEC_UPDATED = "Y"
    rows.updateRow(row)

 print "BEC_UPDATED field populated"
person GISGe    schedule 07.01.2016