现需要将Excel表信息批量赋值(不是挂接)到Shp文件的属性表,两张表的字段、记录数一模一样,至于为什么会出现这样的问题,咱也不敢问,只有想个法子把它搞定!

原始的Excel信息表共57列,总共3万多条记录,包含了正确的记录数据,如下:

目标的ArcGIS属性表也是57列(不是Table表,是要素类的属性表),记录中的信息不正确,如下:

好在它们的FID字段可以一一对应,现在需要根据Excel属性表把ArcGIS属性表填充正确。

常规思路

最容易想到的方法是,用属性表连接Excel表,然后利用字段计算器,分别进行计算。

由于记录有3万多条,平均一个字段计算要8分钟,这也得花一天时间啊,如果没有其实方法,且不用管"白猫""黑猫",能解决就行。

编程思维

从上面的方法,我们会很快发现一个问题:50多个字段的计算都是重复一个步骤,在某个字段上右键,点击"字段计算器"弹出窗口,选择相应的字段,点击确定。这个过程简单而无味,是否有让电脑自动重复这个操作,解放我们的双手?答案是肯定的,通过简单的编程来实现重复的操作,对于本场景最佳编程方式是使用强大的Python脚本。对于新手来说也莫怕,编程并不可怕,可怕的是你遇到这种问题不会编程。下面来试一下:

简单解释一下:

第一步,导入arcpy,这是ESRI给我造好的"轮子",引入它后可以做所有地理处理的功能;

第二步,直接调用字段计算的方法,方法名称是:arcpy.CalculateField_management,其后面的括号带四个参数,分别是计算的图层名称(即表名称)、计算的字段(即在哪个字段上右键调出字段计算器)、计算表达式(就是选择的赋值字段)、Python版本(固定值);

第三步,回车执行,糟糕,报错了。不要紧,仔细分析一下,看是语法问题,还是数据问题,重写一句再执行就对了。

有了成功的开始,是不是增加信心。我们不可能手动输入50多句话,也很难写的,得再想个法子来解放双手(再次编程思维)。强大的Excel上场了:用公式写好一行,直接向下拖动(或双击右下角),呵呵,这个我最擅长了。

将这些正确语法的Python语句放在窗口中执行,连续两次回车才是执行哦!

接下来就慢慢等,虽然不需要反复操作,但时间也要花很久。

收工。

---------回--------家---------吃---------饭--------

Too young to simple!第二行就报错了

怎么办?有三种方案:

方案一:辞职转行了,处理数据真是心累!

方案二:把问题返回给用户,让他们改好带拿过来!(你以为他们会听你的吗?你以为他们能准备无误地改得好吗?)

方案三:百度、谷歌,查一下原因,写一个能容错的脚本,学习一下ArcPy处理地理数据。

编程能力

接下来,才是展示真正的技术的时候了。在连接好Excel表后,不使用字段计算器工具和脚本,而且是通过遍历的方式赋值。

连接可保证行数相同。

连接后将数据导出后,将

下面这段代码主要考虑三个问题:

(1)同名字赋值,如将Name_1的值赋给Name;

(2)缺失字段不赋值,如果不存在Name_1字段,则Name的值不重处理;

(3)忽略值与类型逻辑不一致的情况,如Count字段的值不能为空,默认为0,而Count_1的值为NULL.

代码如下,不过多解释,因为这不是本文重点。

import arcpy,os

input_table=arcpy.GetParameterAsText(0)

input_result=arcpy.GetCount_management(input_table)

input_count= int(input_result.getOutput(0))

arcpy.AddMessage("input count:"+ str(input_count))

oidFieldName=arcpy.Describe(input_table).OIDFieldName

allfields = arcpy.ListFields(input_table)

lstFields=[]

for field in allfields:

lstFields.append(field.name)

arcpy.AddMessage(lstFields)

# foreach all row and all field

cursor = arcpy.UpdateCursor(input_table)

for row in cursor:

fields = arcpy.ListFields(input_table)

oid=int(row.getValue(oidFieldName))

if oid>1:

arcpy.AddMessage(oid)

for field in fields:

if field.required or field.name[-2:]=='_1':

print('')

else:

targetField=field.name+'_1'

if targetField in lstFields:

newValue=row.getValue(targetField)

try:

row.setValue(field.name,newValue)

#arcpy.AddMessage(field.name+":"+ str(newValue))

except:

#arcpy.AddMessage(field.name+":except....")

pass

else:

print('')

#arcpy.AddMessage(targetField+":is not exist")

cursor.updateRow(row)

慢慢等结果了:

小结

1、要学会有编程(或程序)的思维去解决问题,提高工作效率;

2、编程解决问题是一种能力,是慢慢学习积累的过程,没有一本速成的书;

3、实际生产过程中的数据往往不是理想的,有各种各样的"陷阱"。

gis属性表怎么导成excel_使用Python脚本将Excel表批量赋值到ArcGIS属性表相关推荐

  1. gis属性表怎么导成excel_将Excel数据导入到ArcGIS属性表

    1.数据准备 要把Excel表里的数据导入到ArcGIS里的地图数据里面,对数据有一个要求,就是两份数据都有相同的一个字段,或者说相同的一列.如下面的实例,地图数据和Excel数据里面有一列代表省份. ...

  2. 如何将Excel表批量赋值到ArcGIS属性表

    情景再现 现需要将Excel表信息批量赋值(不是挂接)到Shp文件的属性表,两张表的字段.记录数一模一样,至于为什么会出现这样的问题,咱也不敢问,只有想个法子把它搞定! 原始的Excel信息表共57列 ...

  3. gis属性表怎么导成excel_第022篇:ArcGIS中将属性表直接导出为Excel的方法

    在使用ArcGIS处理数据的过程中,经常需要导出属性表.无论是分析也好,是添加复杂字段内容也好,Excel都要比ArcGIS本身出色得多.大家通常采用的方式是先导出成txt或dbf,再转成Excel. ...

  4. django调用python脚本返回_Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境...

    单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的settin ...

  5. oracle表数据如何导出成dbf,怎么将EXCEL导成DBF?《dbf导出excel数据》

    如何将excel表格存为dbf 2007以上版本不支持直接转换成DBF格式文件,用2003版本另存为dbf表格,直接点击另存为 excel2016 怎么打开dbf文件?不要跟我说直接选择文件类型,20 ...

  6. 怎么用python处理word和excel_用python操作word excel

    https://www.cnblogs.com/ontheway703/p/5266041.html docx 库 文章结构: 一.docx 基本用,创建 docx 文件并添加数据 二.深入理解文本格 ...

  7. Django框架(八)--单表增删改查,在Python脚本中调用Django环境

    一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...

  8. 每日定点将excel数据批量插入mysql数据库对应表

    最近在研究利用Metabase+MySQL实现excel数据的页面呈现,但excel数据每天需要手工上传真的很烦人,所以在网上参考各路大神,用Python实现了excel数据的每日自动上传至MySQL ...

  9. Navicat将mysql表结构导成oracle表结构

    1,选中对应的表右键逆向表到模型 2.点击右上角文件转换模型为 3.模型选择物理,数据库oracle,选择对应的版本 4.新弹出的模型点击右上角文件,导出sql 5.选择路径导出sql

最新文章

  1. 概念艺术绘画学习教程 Schoolism – Foolproof Concept Painting with Airi Pan
  2. 基于大数据的Uber数据实时监控(Part 4:Spark Streaming、DataFrames和HBase)
  3. sphinx-release 2.1.4
  4. 第十二天:规划成本管理,成本类型, 资产折旧;和 估算成本,估算成本知识点提示
  5. 程序简单教程:飞秋官方下载
  6. ironpython调用c dll_IronPython脚本调用C#dll示例
  7. 20150430 调试分析之 根据内核报错信息栈信息分析错误
  8. cisco 2610 2950 单臂路由得一些心得
  9. 悦诗风吟网络营销的目标_睫毛膏营销策划方案
  10. 超浪漫-HTML5生日祝福网页制作 ❤粉色少女系列为你定制❤ HTML+CSS+JavaScript
  11. cannot import name 'NPCAP_PATH'
  12. Mybatis 缓存
  13. 求职招聘小程序 毕业设计毕业论文 开题报告和效果图参考(基于微信小程序毕业设计题目选题课题)
  14. android 画尖角气泡,Android 实现气泡布局/弹窗,可控制气泡尖角方向及偏移量
  15. 安卓日历每日提醒_Android日历事件管理器,是时候为你的APP增加一个事件提醒功能啦!...
  16. 【课程总结】2022中科大-组合数学-期末考试试题
  17. C语言单链表 看不懂temp->next = book; book->next =NULL;
  18. 通过数据可视化进行足球进球方式分析球员属性
  19. 全志A10s datasheet,A10s 数据手册,A10s规格书
  20. sketchflow_使用SketchFlow进行快速原型制作

热门文章

  1. Jenkins:配置信息变更历史
  2. C语言指出下列程序的错误,2012年计算机二级C语言精编教程第二章(8)
  3. linux samba免密码,Ubuntu如何不用密码访问samba服务器
  4. opencv 环境变量
  5. mnn op name is empty or dup
  6. visual studio intergration
  7. python 比较list差异
  8. pyotrch nn.Conv2d中groups参数的理解
  9. No module named 'tf_extended'
  10. from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver,