在ArcGIS中,用Python指令碼批量修改FeatureClass的名稱與欄位

NO IMAGE

在ArcGIS中,用Python指令碼批量修改FeatureClass的名稱與欄位

要求將一個gdb中的檔名改成另一種標準下的命名。並且,有一點比較麻煩的是,需要將每一個FeatureClass中的一些欄位的名稱、型別按照要求修改。

一個gdb裡有五六十個圖層,每個圖層中要修改的欄位又有十幾二十個,所以手動用ArcGIS的欄位計算器之類的功能進行修改還是不太現實的。

查閱了一些資料,用ArcGIS結合Python指令碼,就可以比較方便的完成了這個繁瑣的工作。

1. 具體要求

1.1 修改檔名

原始檔案命名方式 (××為任意兩個字母)修改後
××MARKCN_××M
××CODECN_××C
其他無規律命名的要素類不變

1.2 修改欄位名稱以及型別
欄位的修改有對照表。arcpy.FeatureClassToFeatureClass_conversion()以及引數我都是用模型“要素類轉要素類”生成的。

2. 實現過程

刪掉了一些羅裡羅嗦的提示。

# -*- coding: utf-8 -*-
import arcpy, sys, os
reload(sys)
sys.setdefaultencoding('utf-8')
input = arcpy.GetParameterAsText(0)
arcpy.AddMessage("輸入檔案: {0}".format(input))
arcpy.env.workspace = ingdb
output = arcpy.GetParameterAsText(1)
arcpy.AddMessage("輸出檔案: {0}".format(output))
FeatureClass = arcpy.ListFeatureClasses()
for fc in FeatureClass:
if any( str in fc for str in ("MARK", "CODE")):
if (fc[-4:] == "MARK"):
name = "CN_"   fc[:2]   "M"
arcpy.FeatureClassToFeatureClass_conversion(os.path.join(input, fc), output, name, "", "--欄位修改,很長一串,這部分根據實際情況用ArcGIS的模型工具生成--", "")
elif (fc[-4:] == "CODE"):
name = "CN_"   fc[:2]   "C"
arcpy.FeatureClassToFeatureClass_conversion(os.path.join(ingdb, fc), outgdb, outName, "", "--欄位修改,很長一串,這部分根據實際情況用ArcGIS的模型工具生成--", "")
else:
arcpy.AddMessage("不對{0} 圖層進行轉換。".format(fc))

雖然結果是對的,但這畢竟還是第一次接觸,可能有很多可以改進的。