01 | da.SearchCursor | 只读查看表或要素类数据。 | |
02 | da.InsertCursor | 向表或要素类插入行。 | |
03 | da.UpdateCursor | 编辑或删除表和要素类行。 | |
04 | SearchCursor | 用于在要素类或表上建立只读游标。 | |
05 | InsertCursor | 向要素类、shapefile 或表中插入行。 | |
06 | UpdateCursor | 创建一个用于更新或删除指定要素类、shapefile 和表中的行的游标。 |
序号 | 函数名称 |
功能说明 |
语法 & 举例 | ||
以下是 arcpy.da.SearchCursor、arcpy.da.InsertCursor、arcpy.da.UpdateCursor |
|||||
01 | da.SearchCursor |
SearchCursor 用于建立从要素类或表中返回的记录的只读访问权限。 ====<<<< Syntax >>>>==== da.SearchCursor (in_table, field_names, {where_clause}, {spatial_reference}, {explode_to_points}, {sql_clause}) ====<<<< Parameters >>>>==== ◈ in_table:要素类、图层、表或表视图。 ====<<<< Properties >>>>==== ◈ fields:返回一个使用这个游标的字段名称的元组,与上面的参数对应。 ====<<<< Methods >>>>==== ◈ next ():将下一行作为元组返回。字段将按照创建光标时所指定的顺序返回。 |
# 用来查询 "Fre = 0" 的全部记录(遇到字符串使用单引号,"Name = 'alex'") cursor = arcpy.da.SearchCursor("union", "Fre", "Fre = 0") # 获取查询列的所有值,并赋值为列表(values) >>> cursor = arcpy.da.SearchCursor("CNTRY92", "NAME") >>> values = [row[0] for row in cursor] # 获取经纬度坐标 >>> cursor = arcpy.da.SearchCursor("CNTRY92", "SHAPE@XY") >>> xy = [row[0] for row in cursor] >>> xy[0] (6.299706626866719, 49.77865316900599) # 获取 polygon 面积 >>> cursor = arcpy.da.SearchCursor("CNTRY92", "SHAPE@AREA") >>> area = [row[0] for row in cursor] >>> area[0] 0.33773702035614406 # 获取 polygon 周长 >>> cursor = arcpy.da.SearchCursor("CNTRY92", "SHAPE@LENGTH") >>> length = [row[0] for row in cursor] >>> length[0] 2.58749040209765 # 获取 polygon 并输出 >>> cursor = arcpy.da.SearchCursor("CNTRY92", "SHAPE@") >>> shape = [row[0] for row in cursor] >>> shape[0] <Polygon object at 0x2acfa110[0x2acf8b40]> >>> arcpy.CopyFeatures_management(shape[0], "shape_00.shp") <Result 'D:\\McDelfino\\Documents\\ArcGIS\\shape_00.shp'> 在 Python 中,构建由三重引号括起的表达式
cursor = arcpy.da.SearchCursor(fc, ["roadclass", "name"], """"roadclass" = 2""") for row in cursor: print(row[1])
|
||
02 | da.InsertCursor |
|
InsertCursor 可在要素类或表上建立写入游标。可以使用 InsertCursor 来添加新行。 ====<<<< Syntax >>>>==== da.InsertCursor (in_table, field_names) ====<<<< Parameters >>>>==== ◈ in_table:要素类、图层、表或表视图。 ◈ fields:返回一个使用这个游标的字段名称的元组,与上面的参数对应。 ====<<<< Methods >>>>==== |
|
|
03 |
UpdateCursor 用于建立对从要素类或表返回的记录的读写访问权限。 ====<<<< Syntax >>>>==== da.UpdateCursor (in_table, field_names, {where_clause}, {spatial_reference}, {explode_to_points}, {sql_clause}) ====<<<< Parameters >>>>==== ◈ in_table:要素类、图层、表或表视图。 ◈ fields:返回一个使用这个游标的字段名称的元组,与上面的参数对应。 ====<<<< Methods >>>>==== ◈ next ():将下一行作为元组返回。字段将按照创建光标时所指定的顺序返回。 ◈ reset ():将光标重置回第一行。 ◈ updateRow (row):更新表中的当前行。 |
|
|||
以下是 arcpy.SearchCursor、arcpy.InsertCursor、arcpy.UpdateCursor |
|||||
04 |
SearchCursor 函数用于在要素类或表上建立只读游标。SearchCursor 可用于遍历行对象并提取字段值。可以使用 where 子句或字段限制搜索,并对结果排序。 以迭代方式搜索游标的方式有两种:for 循环或者 while 循环(通过游标的 next 方法返回下一行)。如果要使用游标的 next 方法来检索行数为 N 的表中的所有行,则脚本必须调用 next N 次。在检索完结果集的最后一行后调用 next 将返回 None,它是一种 Python 数据类型,此处用作占位符。 返回值为 Cursor 类,具体属性与方法参见 Cursor 类。 ====<<<< Syntax >>>>==== SearchCursor (dataset, {where_clause}, {spatial_reference}, {fields}, {sort_fields}) ====<<<< Parameters >>>>==== ◈ dataset:The feature class, shapefile, or table containing the rows to be searched. |
mxd = arcpy.mapping.MapDocument("CURRENT") df = arcpy.mapping.ListDataFrames(mxd)[0] lyrs = arcpy.mapping.ListLayers(mxd) lyr = lyrs[0] # 内容需要用单引号引起来,只查询辽宁省的部分 # for 循环 cursor = arcpy.SearchCursor(lyr, "NAME='辽宁省'") for row in cursor: print row.getValue("ID") # while 循环,需要得到 row,然后判断 row 是否存在 cursor = arcpy.SearchCursor(lyr, "NAME='辽宁省'") row = cursor.next() while row: print row.getValue("ID") row = cursor.next() |
|||
05 |
向要素类、shapefile 或表中插入行。InsertCursor 返回一个分发行对象的枚举对象。 可使用 newRow 方法从插入行的枚举对象获取新的行对象。每次调用光标上 insertRow 都会在表中创建新行,该行的初始值设置为输入行中的值。 返回值为 Cursor 类,具体属性与方法参见 Cursor 类。 ====<<<< Syntax >>>>==== InsertCursor (dataset, {spatial_reference}) ====<<<< Parameters >>>>==== ◈ dataset:The feature class, shapefile, or table containing the rows to be searched. |
cursor = arcpy.InsertCursor(lyr) for i in range(1, 10): row = cursor.newRow() row.setValue("NAME", "阿拉斯加") row.setValue("ID", i) cursor.insertRow(row) # 将其删除 del cursor, row |
|||
06 |
UpdateCursor 函数创建一个用于更新或删除指定要素类、shapefile 和表中的行的游标。该游标将数据锁定保留至脚本完成或更新游标对象被删除时。 以迭代方式更新游标的方式有两种:for 循环或者 while 循环(通过游标的 next 方法返回下一行)。如果要使用游标的 next 方法来检索行数为 N 的表中的所有行,脚本必须调用 next N 次。在检索完结果集的最后一行后调用 next 将返回 None,它是一种 Python 数据类型,此处用作占位符。 返回值为 Cursor 类,具体属性与方法参见 Cursor 类。 ====<<<< Syntax >>>>==== UpdateCursor (dataset, {where_clause}, {spatial_reference}, {fields}, {sort_fields}) ====<<<< Parameters >>>>==== ◈ dataset:The feature class, shapefile, or table containing the rows to be searched. |
# 将一列的数据赋值到另一列 # for 循环 cursor = arcpy.UpdateCursor(lyr) field1 = "BOU2_4M_" field2 = "BOU2_4M_ID" for row in cursor: row.setValue(field1, row.getValue(field2)*2) cursor.updateRow(row) # while 循环,最后的时候 row 返回为 0 cursor = arcpy.UpdateCursor(lyr) row = cursor.next() while row: row.setValue(field1, row.getValue(field2)/2) cursor.updateRow(row) row = cursor.next() |
|||