如何在工具箱脚本中使用列表字段功能?
我正在尝试写一个简单的脚本,用于一个工具箱,类似于 Addfield_datamanagement
这个工具箱。这个脚本的作用是给一个特征类的表格或者带有属性表的 shapefile
添加一个新字段。到目前为止,一切都很顺利。
# Import system modules
import arcpy
#Workspace
arcpy.env.workspace="C:\\Users\\xxx.gdb"
# Set feature class
inputFC = arcpy.GetParameterAsText(0)
# Get List of Fieldnames
inputString =arcpy.GetParameterAsText(1)
inputString =arcpy.ValidateFieldName(inputString,arcpy.env.workspace)
fieldList =inputString.split(";")
fieldType = arcpy.GetParameterAsText(2)
for fieldName in fieldList:
arcpy.AddField_management(inputFC , fieldName, fieldType)
arcpy.AddMessage("Field generated:" + fieldName)
arcpy.AddMessage ("Script executed")
看起来这个功能是可以的,但现在我想在创建新字段之前,先检查一下 fieldname
是否已经存在,如果存在的话就打印出这个已有的名字!我考虑过使用字段列表和内置的 len()
函数来实现这个功能:
if len(arcpy.ListFields(inputFC,?)==1: #not sure if inputFC is right?
arcpy.AddMessage("Field already exists"+fieldName)
不过我不太确定 ListFields
命令的语法,以及如何把它整合到上面的代码中去!所以,任何帮助都非常欢迎和感激!
1 个回答
2
ListFields
会返回一个字段对象的列表,每个字段对象都有一些相关的属性。
所以它的结构大概是这样的:
field_list = [field object1: field.name, field.type, etc...;
field object2: field.name, field.type, etc...;
]
你可能想要访问每个字段对象的 .name
属性,以判断它是否和变量 fieldList
中的任何名字匹配。
首先,生成一个字段名称的列表:
existingFields = [] # empty list
for field in arcpy.ListFields(inputFC): # iterate over fields
existingFields.append(field.name) # add the attribute name to list for each field
接下来,将现有字段的列表与用户想要添加的字段列表进行比较:
duplicateFields = set(existingFields) & set(fieldList)
if len(duplicateFields) == 0:
carry on with adding fields
else:
arcpy.AddMessage('Field(s) already exist: ' + duplicateFields)