地信网论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

免费视频|新人指南|广告合作|投诉删帖

查看: 119|回复: 4
收起左侧

[技术交流] 关于表连接后相同名称字段批量计算的问题

  [复制链接]

4

主题

1094

铜板

26

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
1060
发表于 2020-11-20 13:22 | 显示全部楼层 |阅读模式
关于批量字段计算
材料:
表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
之后,选择运行。
第二,将手动计算的步骤用脚本自动化。具体代码如下:
  1. </blockquote></div>[hide]<div class="blockcode"><blockquote># -*- coding: utf-8 -*-

  2. import os
  3. import arcpy
  4. import string
  5. import sys
  6. from arcpy import env

  7. def joinTableCalFieldValue(inTable, inTableJoinField, joinTable, joinTableJoinField, calFields):
  8.    
  9.     # 获取表名称
  10.     inTableName = os.path.basename(arcpy.mapping.Layer(inTable).dataSource).split('.')[0]
  11.     joinTableName = os.path.basename(arcpy.mapping.Layer(joinTable).dataSource).split('.')[0]
  12.    
  13.     # 表连接
  14.     arcpy.AddJoin_management(inTable, inTableJoinField, joinTable, joinTableJoinField, 'KEEP_COMMON')
  15.     # arcpy.AddMessage(calFields.split(';'))
  16.     # 获取要计算的字段名,并逐个字段计算
  17.     calFieldsList = [eachField.encode('raw_unicode_escape') for eachField in calFields.split(';')]
  18.     # arcpy.AddMessage(calFieldsList)
  19.     for eachField in calFieldsList:
  20.         arcpy.CalculateField_management(inTable, eachField,
  21.                                         '!' + joinTableName + '.' + eachField + '!', 'PYTHON_9.3')
  22.     # 移除表连接
  23.     arcpy.RemoveJoin_management(inTable)

  24.     arcpy.RefreshActiveView()
  25.     arcpy.RefreshTOC()


  26. if __name__ == '__main__':
  27.     inTable = arcpy.GetParameterAsText(0)
  28.     inTableJoinField = arcpy.GetParameterAsText(1)
  29.     joinTable = arcpy.GetParameterAsText(2)
  30.     joinTableJoinField = arcpy.GetParameterAsText(3)
  31.     calFields = arcpy.GetParameterAsText(4)

  32.     joinTableCalFieldValue(inTable, inTableJoinField, joinTable, joinTableJoinField, calFields)
复制代码
[/hide]

表连接相同字段赋值.rar

4.29 KB, 下载次数: 6

售价: 15 个铜板  [记录]

评分

参与人数 1铜板 +5 收起 理由
zchaox + 5 好贴好报!

查看全部评分

更多GIS资料信息请关注微信公众号HolaGIS

6

主题

5207

铜板

14

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
729

灌水勋章活跃勋章贡献勋章

发表于 2020-11-20 18:43 | 显示全部楼层
谢谢分享
回复

使用道具 举报

4

主题

4744

铜板

8

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
873

爱心勋章灌水勋章荣誉会员勋章活跃勋章地信专家组贡献勋章5周年纪念勋章成就学员勋章

发表于 2020-11-20 19:01 | 显示全部楼层
地信网论坛版规和新人指南
下载学习一下
回复 支持 反对

使用道具 举报

47

主题

3万

铜板

68

好友

黄金会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
4051

灌水勋章名人堂勋章

QQ
发表于 2020-11-20 22:37 | 显示全部楼层
了解                           
回复 支持 反对

使用道具 举报

2

主题

1100

铜板

3

好友

至尊VIP

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
43
发表于 2020-11-22 12:56 | 显示全部楼层
地信网论坛发帖规范—规范发帖,方便你我他!
谢谢大佬分享:bq
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

地信网十周年
在线客服

新人指南|地信论坛 ( 湘ICP备14003170号-5 土流集团有限公司 版权所有 免责声明 联系方式 邮箱登陆

湘公网安备 43010302000511号

Powered by Discuz! X3.2

快速回复 返回顶部 返回列表