需求
在Arcmap里用一个字段给另外一个字段进行赋值是十分简单的,但在Arcpy里,用一个字段给另外一个字段的赋值一般采用 字段计算器(CalculateField_management) 来完成,这个方法确实简单,但我在学习游标的时候在想能否使用游标完成这件事情,在网上检索了一段时间,大部分都是用游标来进行特定值的赋值,例如整个字段都赋值为某个数字等等,缺少用一个字段来对另外一个字段进行赋值的方法。因此就简单尝试了一下,方法是可行的,记录下来方便自己!
主要思想
这里赋值主要用到更新游标(UpdateCursor) 来完成,其次我们需要准备一个列表,存储我们需要赋的值。
1、当更新游标选中某一行的同时,设置变量i,让其可以同时遍历列表里的值
2、通过setValue函数将列表里的值一一赋给目标字段,实现字段赋值。
代码
我这里用新建了一个字段city2,并用数据里的city字段对city2进行赋值。
# -*- coding:utf-8 -*-
import arcpy
import sys,locale
reload(sys)
sys.setdefaultencoding("utf-8")
#设置目标数据
data = r"D:\New Desktop\2019全国行政区划\县域粤港澳大湾区.shp"
#添加字段city2
arcpy.AddField_management(data,'city2','TEXT',field_length = 50)
# 为数据设置好更新游标
Cursor_update = arcpy.UpdateCursor(data)
#为数据设置查询游标
Cursor_search = arcpy.SearchCursor(data)
#用一个列表存储city的值,方便给新字段赋值
list = []
for row in Cursor_search:
list.append(row.getValue('city'))
#给city2字段赋值
i = 0
for row_u,row_s in zip(Cursor_update,Cursor_search):
row_u.setValue('city2',list[i])
i += 1
Cursor_update.updateRow(row_u)
#打印出city2字段的值
for row in Cursor_search:
print row.getValue('city2')
运行结果
最后也是成功弄出来了,还是比较简单的!
缺点:这个赋值的速度应该取决于数据量,具体的时间复杂度就不计算了