|
关于批量字段计算
材料:
表1:空的属性表(仅有30列数据格式)
表2:数据表(100列)
目标:
将表2中的几十个属性 输入到表1对应的单元格中
我的做法:
属性表 > 连接与关联 > 字段计算器依次计算
缺点:
每一列都要重新修改字段
如
开始首先
ZZY.DI_LEI = [Export_Output_2.DI_LEI] 完成一列
结束后下一个又要
ZZY.BH_DJ = [Export_Output_2.BH_DJ]
我的需求:
小弟不懂编程,想请问下有没有类似的代码
比如
ZZY.BH_DJ = [Export_Output_2.字段名字]
这样就可以所有列都用同同一行算式了吧 OuO
@zchaox
看到有朋友提问关于表连接后,批量计算字段的方法,在这里做简单的交流。
连接后,一个个手动计算就不提了,主要是可以批量且可复制性的操作,我掌握的有两个。
第一,将需要计算的表和关联的表都导入.mdb,用Access打开,用SQL的update语句去更新字段值。假设表分别为TABLE1、TABLE2,连接字段为表1为FIELDA,表2为FIELDB,需要更新的字段为FIELD1、FIELD2、FIELD3:
UPDATE TABLE1 A,TABLE2 B SET A.FIELD1 = B.FIELD1,A.FIELD2 = B.FIELD2,A.FIELD3 = B.FIELD3 WHERE A.FIELDA = B.FIELDB
之后,选择运行。
第二,将手动计算的步骤用脚本自动化。具体代码如下:- </blockquote></div>[hide]<div class="blockcode"><blockquote># -*- coding: utf-8 -*-
- import os
- import arcpy
- import string
- import sys
- from arcpy import env
- def joinTableCalFieldValue(inTable, inTableJoinField, joinTable, joinTableJoinField, calFields):
-
- # 获取表名称
- inTableName = os.path.basename(arcpy.mapping.Layer(inTable).dataSource).split('.')[0]
- joinTableName = os.path.basename(arcpy.mapping.Layer(joinTable).dataSource).split('.')[0]
-
- # 表连接
- arcpy.AddJoin_management(inTable, inTableJoinField, joinTable, joinTableJoinField, 'KEEP_COMMON')
- # arcpy.AddMessage(calFields.split(';'))
- # 获取要计算的字段名,并逐个字段计算
- calFieldsList = [eachField.encode('raw_unicode_escape') for eachField in calFields.split(';')]
- # arcpy.AddMessage(calFieldsList)
- for eachField in calFieldsList:
- arcpy.CalculateField_management(inTable, eachField,
- '!' + joinTableName + '.' + eachField + '!', 'PYTHON_9.3')
- # 移除表连接
- arcpy.RemoveJoin_management(inTable)
- arcpy.RefreshActiveView()
- arcpy.RefreshTOC()
- if __name__ == '__main__':
- inTable = arcpy.GetParameterAsText(0)
- inTableJoinField = arcpy.GetParameterAsText(1)
- joinTable = arcpy.GetParameterAsText(2)
- joinTableJoinField = arcpy.GetParameterAsText(3)
- calFields = arcpy.GetParameterAsText(4)
- joinTableCalFieldValue(inTable, inTableJoinField, joinTable, joinTableJoinField, calFields)
复制代码 [/hide]
|
评分
-
查看全部评分
|