免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 1998|回复: 8
收起左侧

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

  [复制链接]

6

主题

1万

铜板

41

好友

VIP会员

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

积分
1390
发表于 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, 下载次数: 43

评分

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

查看全部评分

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

10

主题

2万

铜板

34

好友

黄金会员

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

积分
4395

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

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

使用道具 举报

4

主题

6700

铜板

15

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1265

爱心勋章灌水勋章荣誉会员勋章活跃勋章地信专家组贡献勋章成就学员勋章童话节勋章

发表于 2020-11-20 19:01 | 显示全部楼层
下载学习一下
回复 支持 反对

使用道具 举报

138

主题

5万

铜板

105

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6630

精华勋章爱心勋章灌水勋章名人堂勋章冰雪节勋章童话节勋章

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

使用道具 举报

2

主题

1273

铜板

3

好友

至尊VIP

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

积分
60
发表于 2020-11-22 12:56 | 显示全部楼层
谢谢大佬分享:bq
回复 支持 反对

使用道具 举报

0

主题

520

铜板

2

好友

助理工程师

Rank: 5Rank: 5

积分
152
发表于 2021-4-7 09:16 | 显示全部楼层
学习一下
回复

使用道具 举报

0

主题

856

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
46
发表于 2021-5-14 21:28 | 显示全部楼层
你好大佬,请教下你,怎么我用着有表达式不对啊,我的10.5
回复 支持 反对

使用道具 举报

0

主题

856

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
46
发表于 2021-5-14 21:40 | 显示全部楼层
大佬你好,请教下我用这个工具的时候字段表达式有问题,我用的10.5是怎么回事啊
回复 支持 反对

使用道具 举报

0

主题

856

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
46
发表于 2021-5-14 21:41 | 显示全部楼层
大佬你好,请教下我用这个工具的时候字段表达式有问题,我用的10.5是怎么回事啊
回复 支持 反对

使用道具 举报

0

主题

856

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
46
发表于 2021-5-14 21:41 | 显示全部楼层
大佬你好,请教下我用这个工具的时候字段表达式有问题,我用的10.5是怎么回事啊
回复 支持 反对

使用道具 举报

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

本版积分规则

在线客服
快速回复 返回顶部 返回列表