Python arcpy UpdateCursor 语法错误
Python syntax error with arcpy UpdateCursor
我是 python 的新手,想要一个脚本来查看功能 class 并比较两个文本字段中的值,然后用 Y
或 N
取决于值是否相同。我想我需要使用带有 if 语句的 UpdateCursor。我尝试了以下方法,但是当我尝试 运行 时出现语法错误。我正在使用 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"
您忘记了 '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"
您的语法错误是由缩进和漏掉的冒号引起的。 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)
我是 python 的新手,想要一个脚本来查看功能 class 并比较两个文本字段中的值,然后用 Y
或 N
取决于值是否相同。我想我需要使用带有 if 语句的 UpdateCursor。我尝试了以下方法,但是当我尝试 运行 时出现语法错误。我正在使用 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"
您忘记了 '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"
您的语法错误是由缩进和漏掉的冒号引起的。 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)