基于ArcGIS的Python批量添加字段

    你还在埋头鼠标左键添加字段,然后机械的输入字段名称、字段类型、字段别名等吗?那你就太low!下面给大家介绍下如何基于ArcGIS利用Python自动批量添加字段,记住这里是自动批量噢。

        首先你需要有一张特定的电子表,在电子表里,你要录入好你需要的字段名称、类型、长度等。如何制作电子表,这里就不说了,请看下表:

2fc93d36da184aa28587e0583d4b4326.png

    其次,在敲代码前,你需要简单的了解下ArcGIS中常见的字段类型。ArcGIS字段类型大致可以归纳为4类:文本、数值、日期、布尔...而我们日常工作中用到最多的就是文本和数值,文本类型(字符串类型)比较简单,录入字段名、字段类型、字符串长度即可,数值类型需要录入字段名、字段类型、精度、小数位数,数值类型中的short、int、long、float、double不是本文的阐述重点,他们只是在长度上存在差异。

     最后,就是敲代码了。代码其实没有我们想的那么复杂,英语不好,能学好代码吗,答案是肯定的,B站大学里的很多讲师,也都是讲蹩脚英语的,有的还是用拼音。代码中常用的英语单词一般不会超过200,而各类编程语言的关键字更是少的可怜,大概就在三五十个。代码实现其实很简单:

       使用文件读取方法open(),逐行遍历电子表格,通过3个if语句,对3种字段类型进行参数设置,实现字段的批量创建。下面附详细代码

# -*- coding: utf-8 -*-
import arcpy
import sys

reload(sys)
sys.setdefaultencoding("utf-8")

def add_fields(in_xlx, in_table):
    # 按字段结构表创建字段
    """
        AddField_management (in_table_要素类, field_name_字段名, field_type_字段类型, {field_precision}_精度, 
        {field_scale}_小数位数, {field_length}_字符串长度, {field_alias}_别名, {field_is_nullable}_是否允许空值,
         {field_is_required}_是否必填, {field_domain}_属性域)    
         in_table, field_name=rows[i][0], field_type=rows[i][1], field_precision=eval(rows[i][2]), 
         field_scale=eval(rows[i][3]),field_length=eval(rows[i][4]), field_alias=rows[i][5],
         field_is_nullable=rows[i][6], field_is_required=rows[i][7], field_domainrows[i][8]
    """
    # 打开字段结构表
    with open(in_xlx, "r") as f:
        lines = f.readlines()[3:]

    rows = [lines[i].strip("\n").split(",") for i in range(len(lines))]  # 以表中每一行作为列表元素,追加到列表rows

    for i in range(len(rows)):
        # 文本类型字段创建
        if rows[i][1].lower() == "text":
            arcpy.AddField_management(in_table, field_name=rows[i][0], field_type=rows[i][1],
                                      field_length=eval(rows[i][4]), field_alias=rows[i][5])
        # 数字类型字段创建
        elif rows[i][1].lower() in ["short", "long", "float", "double"]:
            arcpy.AddField_management(in_table, field_name=rows[i][0], field_type=rows[i][1],
                                      field_precision=eval(rows[i][2]), field_scale=eval(rows[i][3]),
                                      field_alias=rows[i][5])
        # 时间类型字段创建
        elif rows[i][1].lower() == "date":
            arcpy.AddField_management(in_table, field_name=rows[i][0], field_type=rows[i][1], field_alias=rows[i][5])


if __name__ == "__main__":
    in_xlx = r"D:\ArcPy\field_struct.csv"
    in_table = r"C:\Users\Lenovo\Desktop\test\标准库.gdb\数据集\本期林地变更小班面"
    add_fields(in_xlx, in_table)
    print "程序运行结束"

使用说明 本程序可以一次性对多个SHP文件增加相 同字段.增加多个字段请输入字段名和类 型,长度等不同参数即可实现. 要注意的 是, 存放SHP的文件夹一定不能中文命名 1. 请把本程序复制到 SHP 的文件夹中运行 例如复制到D:\123,将对D盘下123目录中 的所有SHP文件进行运算(包括子文件夹) 2. 因为 ARCMAP 的命令不支持中文文件名 所以存放SHP 的文文件夹请不要以中文 命名或特殊符号命名 3. ARCMAP的命令行不支持以数字开头.但可 在字段后面加数字,如CODE1,CODE2.所以 字段名不要用到数字开头,确实要用到数 字的请把SHP文转成TAB在MAPINFO里修改 但奇怪的是,直接在属性列表中却可以添 加以数字开头的字段 4. 在运行程序后,请把弹出的记事本内容复 制到ARCMAP的命令行里粘帖后回车即可 5. 在XPSP2和2003SERVER系统中可以执行 不能在98中运行,2000的系统没测试 6.(还请哪位精通批处理的大侠指点一下) 目前尚有一个问题没有解决,就是同一类型 的字段如果要加二个,不能连着加.得关了程 序再开才能进行.否则弹的记事本内容中,前 面的内容还是上次的字段路径. 但可以连着加不同的字段类型. 比如加完TEXT类型的字段.不能接着加TEXT 类型的字段,但可以加DATE/FLOAT等其他类型 ___________________________________ 如果不能运行或出现其他错误,请到我的 百度空间留言说明你的情况及建议: http://hi.baidu.com/lgx8280998 -----为解决问题而学习 BY 千浪 2009-03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值