gis属性表怎么导成excel_使用Python脚本将Excel表批量赋值到ArcGIS属性表
现需要将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属性表相关推荐
- gis属性表怎么导成excel_将Excel数据导入到ArcGIS属性表
1.数据准备 要把Excel表里的数据导入到ArcGIS里的地图数据里面,对数据有一个要求,就是两份数据都有相同的一个字段,或者说相同的一列.如下面的实例,地图数据和Excel数据里面有一列代表省份. ...
- 如何将Excel表批量赋值到ArcGIS属性表
情景再现 现需要将Excel表信息批量赋值(不是挂接)到Shp文件的属性表,两张表的字段.记录数一模一样,至于为什么会出现这样的问题,咱也不敢问,只有想个法子把它搞定! 原始的Excel信息表共57列 ...
- gis属性表怎么导成excel_第022篇:ArcGIS中将属性表直接导出为Excel的方法
在使用ArcGIS处理数据的过程中,经常需要导出属性表.无论是分析也好,是添加复杂字段内容也好,Excel都要比ArcGIS本身出色得多.大家通常采用的方式是先导出成txt或dbf,再转成Excel. ...
- django调用python脚本返回_Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境...
单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的settin ...
- oracle表数据如何导出成dbf,怎么将EXCEL导成DBF?《dbf导出excel数据》
如何将excel表格存为dbf 2007以上版本不支持直接转换成DBF格式文件,用2003版本另存为dbf表格,直接点击另存为 excel2016 怎么打开dbf文件?不要跟我说直接选择文件类型,20 ...
- 怎么用python处理word和excel_用python操作word excel
https://www.cnblogs.com/ontheway703/p/5266041.html docx 库 文章结构: 一.docx 基本用,创建 docx 文件并添加数据 二.深入理解文本格 ...
- Django框架(八)--单表增删改查,在Python脚本中调用Django环境
一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...
- 每日定点将excel数据批量插入mysql数据库对应表
最近在研究利用Metabase+MySQL实现excel数据的页面呈现,但excel数据每天需要手工上传真的很烦人,所以在网上参考各路大神,用Python实现了excel数据的每日自动上传至MySQL ...
- Navicat将mysql表结构导成oracle表结构
1,选中对应的表右键逆向表到模型 2.点击右上角文件转换模型为 3.模型选择物理,数据库oracle,选择对应的版本 4.新弹出的模型点击右上角文件,导出sql 5.选择路径导出sql
最新文章
- 概念艺术绘画学习教程 Schoolism – Foolproof Concept Painting with Airi Pan
- 基于大数据的Uber数据实时监控(Part 4:Spark Streaming、DataFrames和HBase)
- sphinx-release 2.1.4
- 第十二天:规划成本管理,成本类型, 资产折旧;和 估算成本,估算成本知识点提示
- 程序简单教程:飞秋官方下载
- ironpython调用c dll_IronPython脚本调用C#dll示例
- 20150430 调试分析之 根据内核报错信息栈信息分析错误
- cisco 2610 2950 单臂路由得一些心得
- 悦诗风吟网络营销的目标_睫毛膏营销策划方案
- 超浪漫-HTML5生日祝福网页制作 ❤粉色少女系列为你定制❤ HTML+CSS+JavaScript
- cannot import name 'NPCAP_PATH'
- Mybatis 缓存
- 求职招聘小程序 毕业设计毕业论文 开题报告和效果图参考(基于微信小程序毕业设计题目选题课题)
- android 画尖角气泡,Android 实现气泡布局/弹窗,可控制气泡尖角方向及偏移量
- 安卓日历每日提醒_Android日历事件管理器,是时候为你的APP增加一个事件提醒功能啦!...
- 【课程总结】2022中科大-组合数学-期末考试试题
- C语言单链表 看不懂temp->next = book; book->next =NULL;
- 通过数据可视化进行足球进球方式分析球员属性
- 全志A10s datasheet,A10s 数据手册,A10s规格书
- sketchflow_使用SketchFlow进行快速原型制作
热门文章
- Jenkins:配置信息变更历史
- C语言指出下列程序的错误,2012年计算机二级C语言精编教程第二章(8)
- linux samba免密码,Ubuntu如何不用密码访问samba服务器
- opencv 环境变量
- mnn op name is empty or dup
- visual studio intergration
- python 比较list差异
- pyotrch nn.Conv2d中groups参数的理解
- No module named 'tf_extended'
- from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver,