Python批量修改shapefile属性表字段名(arcpy增删字段)

本文介绍了作者在时间紧迫的情况下,尝试3种方法成功修改shapefile属性表字段名的过程。方法1和2分别通过dbf文件读写和尝试使用arcpy的AlterField_management函数,但都因为空值、编码问题和函数不存在而失败。最终,通过方法3实现了字段名的修改,即新增同属性字段、计算新字段值等于旧字段值,然后删除旧字段。
摘要由CSDN通过智能技术生成

尝试了3种方法,时间紧迫屡败屡战,最后终于成功。

方法1和2是失败记录,希望有类似经历成功的同学分享下经验。

方法3是成功记录,修改 = 新增 + 计算 +删除相关字段,因为没有删除改名前字段需求,故删除部分没有另做。

  • 方法1 —— 【将shapefile的dbf文件按csv文件读写】

——失败,dbf中有空值及编码问题

不同文件间通过改后缀简单粗暴改写,操作方法存在风险

过于依赖熟悉的领域,由于时间紧迫没有试用dbf第三方库

#-*- coding: utf-8 -*-

import os
import shutil
import csv

#批量修改shp中dbf文件中的字段名
#LANE_WIDTH改为LANEWIDTHL
#LANE_WID_1改为LANEWIDTHR
#ORIGIN_LIN改为ORG_LINKID

roadDir = r"D:\20Q1\00DATA\ModifyTitle\ROAD_TEST\\"
modifyRoadDir = r"D:\20Q1\00DATA\ModifyTitle\ModifiedLink\\"
csvDir = r"D:\20Q1\00DATA\ModifyTitle\ROAD_CSV\\"
fileList = os.listdir(roadDir)

num = 0
for file in fileList:
    #新建修改后的城市文件夹
    city = file.split("_")[0]
    
    os.mkdir(csvDir + city)    
    os.mkdir(modifyRoadDir + city)
    shutil.copy(roadDir + file + "/RD_LINK.dbf", csvDir + city + "/RD_LINK.csv")
    
    print("正在生成{}新dbf文件......".format(city))
   
### 回答1: arcpy是ArcGIS Python API中的一个模块,可用于自动化地执行GIS任务。其中一个常见的任务是批量计算字段,可以通过以下步骤实现。 首先,需要导入arcpy模块并指定工作空间。该工作空间应该包含要进行字段计算的所有要素类。 接下来,需要使用arcpy.ListFeatureClasses函数获取要素类列的名称。这将为我们提供要进行批量字段计算的所有要素类的名称。 然后,需要编写一个循环,在每个要素类中运行计算字段工具。可以使用FieldMappings对象来指定要计算的字段和相应的达式。 最后,需要使用Cursor对象来更新要素类中每行的值,从而执行字段计算。在操作完成后,需要确保保存更改。 总的来说,使用arcpy完成批量计算字段非常方便,并且可以轻松地自动化这个常见任务,从而提高工作效率。 ### 回答2: arcpyPython下的一个模块,通过它可以将GIS数据与Python语言结合起来,实现各种自动化操作。 在GIS数据处理中,计算字段是非常常见的一个操作,它可以根据某些条件在现有数据的基础上新增或更新字段的数值,从而实现数据的合并、统计和展示等功能。而如果需要对大量的数据进行计算字段操作,需要手动一个一个打开并进行操作,并不仅耗时、效率低下,还容易出错。因此,arcpy提供了批量计算字段的功能,可以一次性对多个需要进行计算字段操作的数据进行批量修改,从而提高了工作效率。 具体实现步骤如下: 1. 导入arcpy模块,设置工作空间,列出待处理数据的名称并储存在一个列中。 2. 对列中的每个数据进行遍历,并进行计算字段操作。可以使用arcpy.CalculateField_management函数来进行数据的计算字段操作,该函数需要指定待处理数据的路径、需要计算字段的名称、计算公式以及计算语言等参数。 3. 将计算后的数据存储到指定路径,并输出处理进度。 使用arcpy进行批量计算字段操作,不仅可以提高效率,还可以减少工作中的疏漏和错误,尤其适用于数据量大的情况。值得一提的是,在进行GIS数据处理时,一定要及时备份数据,以免操作失误而导致数据丢失或修改不可逆。 ### 回答3: ArcpyPython编程语言中一种专门用于地理信息系统(GIS)的模块。它可以用来自动化地完成许多GIS操作和任务,比如批量计算字段批量计算字段是将同一数据集的所有要素的某个字段的值更新为新的值的过程。这个过程可以用PythonArcpy模块自动化执行,该过程步骤如下: 1. 导入Arcpy模块,这通常是通过在Python代码的开头添加以下行实现的: ```python import arcpy ``` 2. 指定工作空间,可以是本地或远程工作空间,如下所示: ```python arcpy.env.workspace = "C:/data" ``` 3. 选择要素集,确定计算字段的数据,如下所示: ```python feature_class = "C:/data/mydata.gdb/myfeatureclass" ``` 4. 选择要更新的字段,确定该字段的数据类型,如下所示: ```python field_name = "myfield" field_type = "DOUBLE" ``` 5. 编写计算公式,计算新的字段值: ```python expression = "!myfield! * 2" ``` 6. 使用UpdateCursor方法更新要素类中的所有要素的字段值: ```python with arcpy.da.UpdateCursor(feature_class, [field_name]) as cursor: for row in cursor: row[0] = eval(expression) cursor.updateRow(row) ``` 以上代码片段使用UpdateCursor方法在要素类的指定字段中更新所有要素的值。在这个例子中,公式“! myfield! * 2”计算新值。我们使用eval()函数来动态计算逐行更改的公式。 总之,批量计算字段可以通过Arpy模块实现自动化的Python脚本来完成,这个过程可以显著提高繁重或重复的任务的效率。例如,批量计算属性信息需要计算的所有要素的平均值,总和或统计了某些条件的时候就非常有用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值