參考:
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]) 1. 注意操作的時候不要選擇數據,否則只會查詢選擇范圍內的信息; 2. 如果想要選擇全部 table 內容,則不需要添加 SQL 語句; 3. 注意 SQL 語法等。
|
||
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()
|
|||
-- |
---------- |
-------------------------------------------------- |