ArcPy 游标位于数据访问模块 (arcpy.da)中,包括用于查询的 SearchCursor ,插入数据的 InsertCursor ,更新和删除的 UpdateCursor 。
SearchCursor 和 UpdateCursor 都支持 SQL WHERE 子句,用于限制所返回的记录的可选表达式。在使用 SQL WHERE 子句时可以用 AddFieldDelimiters 函数返回字段分隔符,因为所查询数据的格式不同,字段分隔符不同,如,文件地理数据库和 shapefile 使用双引号 (" "),个人地理数据库使用方括号 ([ ]),而 ArcSDE 地理数据库不使用字段分隔符。
使用游标会锁定处理的数据,使用完后需要释放,可以使用 Python 的 with 语句,这会自动释放锁。
SearchCursor
# -*- coding: utf-8 -*-
import arcpy
from arcpy import env
env.workspace = r'E:\EsriPress\Python\Data\Exercise07'
fc = 'airports.shp'
delimitedField = arcpy.AddFieldDelimiters(fc, 'COUNTY')
with arcpy.da.SearchCursor(fc, ('NAME', 'FIPS'), delimitedField + ' = \'Anchorage Borough\'') as cursor:
for row in sorted(cursor):
print("name:{0},county:{1}".format(row[0], row[1]))
InsertCursor
# -*- coding: utf-8 -*-
import arcpy
from arcpy import env
env.workspace = r'E:\EsriPress\Python\Data\Exercise07'
fc = 'Results/airports_anchorage.shp'
with arcpy.da.InsertCursor(fc, ('SHAPE@XY', 'Name')) as cursor:
cursor.insertRow(((-149.771939, 61.100004), 'New Airport'))
UpdateCursor
# -*- coding: utf-8 -*-
import arcpy
from arcpy import env
env.workspace = r'E:\EsriPress\Python\Data\Exercise07'
fc = 'Results/airports_anchorage.shp'
delimfield = arcpy.AddFieldDelimiters(fc, 'STATE')
with arcpy.da.UpdateCursor(fc, ('STATE', 'NAME'), delimfield + ' <> \'AK\'') as cursor:
for row in cursor:
row[0] = 'AK'
cursor.updateRow(row)
if row[1] == 'New Airport':
cursor.deleteRow()