背景:
使用某建库软件做耕地资源质量分类,虽然大部分操作就是无脑点点点,但是土壤四属性数据来源不会并批量赋值。前期使用过程中,因为一些客观原因要不断重新来过🤣,断绝了多图层、多字段,手动重复赋值的想法。
最初使用FME软件的“DatabaseUpdater”转换器进行属性更新,导成果过国检报错不断。导致一度怀疑自我😶,算了最后还是选择用py更新吧。废话不多说,上代码!
代码:
# -*- coding: cp936 -*-
import arcpy
#更新图层名称
listc = ['EJDLBH', 'HFSXBH', 'XZGD', 'XZHFDL']
#待更新 “新增耕地、新增恢复” 图层属性值
listbsm = ['BSM1','BSM2']
listtchd = ['TCHD1','TCHD2']
listtrzyjzhl = ['YJZHL1','YJZHL2']
listtrphz = ['PHZ1','PHZ2']
for num in range(len(listc)):
print('正在更新图层:'+listc[num])
fc = 'D:/耕地资源质量分类/GDZLFL.gdb/Data/'+listc[num]
fields = ['BSM','TCHDSJLY','TRZDSJLY','TRYJZSJLY','TRPHZSJLY','TCHD','TCHDJB','TRZD','TRZDJB','TRYJZHL','TRYJZHLJB','TRPHZ','TRPHZJB','TRZJSWRZK','TRZJSWRJB']
#赋值结果仅为程序演示所用
with arcpy.da.UpdateCursor(fc, fields) as cursor:
for row in cursor:
if listc[num][0:2] == 'XZ' and row[0] in listbsm:
row[1]='3'
row[2]='3'
row[3]='3'
row[4]='3'
row[5]=listtchd[listbsm.index(row[0])]
row[6]='2'
row[7]='壤土'
row[8]='1'
row[9]=listtrzjzhl[listbsm.index(row[0])]
row[10]='1'
row[11]=listtrphz[listbsm.index(row[0])]
row[12]='3a'
row[13]='绿色'
row[14]='1'
else:
row[1]='2'
row[2]='2'
row[3]='2'
row[4]='2'
cursor.updateRow(row)
print('over')