基于ArcGIS的Python批量添加字段

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

    你还在埋头鼠标左键添加字段,然后机械的输入字段名称、字段类型、字段别名等吗?那你就太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 "程序运行结束"

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

参考给定引用未找到基于ArcGIS Pro使用Python进行多进程批量添加字段的具体方法。不过可以给出一个大致思路和示例代码框架。 在ArcGIS Pro中使用Python进行多进程批量添加字段,可借助`multiprocessing`模块来实现多进程处理。以下是一个示例代码框架: ```python import arcpy import multiprocessing def add_field(feature_class, field_name, field_type): try: arcpy.management.AddField(feature_class, field_name, field_type) print(f"成功为 {feature_class} 添加字段 {field_name}") except arcpy.ExecuteError: print(f"为 {feature_class} 添加字段 {field_name} 时出错: {arcpy.GetMessages(2)}") def main(): # 设置工作空间 arcpy.env.workspace = r"C:\your_workspace.gdb" # 获取所有要素类 feature_classes = arcpy.ListFeatureClasses() # 定义要添加字段信息(字段名和字段类型) fields_to_add = [ ("new_field_1", "TEXT"), ("new_field_2", "DOUBLE") ] # 创建进程池 pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) for feature_class in feature_classes: for field_name, field_type in fields_to_add: # 提交任务到进程池 pool.apply_async(add_field, args=(feature_class, field_name, field_type)) # 关闭进程池,不再接受新任务 pool.close() # 等待所有任务完成 pool.join() if __name__ == "__main__": main() ``` 在上述代码中,首先定义了一个`add_field`函数,用于向单个要素类添加单个字段。然后在`main`函数中,设置工作空间,获取所有要素类,并定义要添加字段信息。接着创建一个进程池,并将每个要素类添加字段的任务提交到进程池。最后关闭进程池并等待所有任务完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值