我正在尝试编写一个脚本,用户可以通过选择值来构建符合我们标准的要素类名称。该脚本中的其他所有内容似乎都工作正常(您可以打印图层名称并且它可以正常工作)。我没有收到错误,我尝试通过更改函数中使用的变量来强制它给我一个错误,但它仍然在半秒内完成脚本并且没有改变任何内容。
import arcpy
#Get Parameters
FC = arcpy.GetParameter(0) #Required
unit = arcpy.GetParameter(1)
sunit = arcpy.GetParameter(2)
sens = arcpy.GetParameter(3)
cat = arcpy.GetParameter(4) #Required
name = arcpy.GetParameter(5) #Required
location = arcpy.GetParameter(6)
daterange = arcpy.GetParameterAsText(7)
date = arcpy.GetParameterAsText(8)
startdate = arcpy.GetParameterAsText(9)
enddate = arcpy.GetParameterAsText(10)
resolution = arcpy.GetParameter(11)
source = arcpy.GetParameter(12)
dt = arcpy.GetParameter(13) #Required
#Construct layer name
##Unit
if unit != "":
unit = unit + "_"
##Subunit
if sunit != "":
sunit = unit + "_"
##SENSITIVITY
if sens == "Yes":
sens = "SENSITIVE_"
elif sens == "Yes, at the feature level":
sens = "SENSITIVEFL_"
##Category
cat = cat.split(" -")[0] + "_"
##Layer Name
##Modifiers
###Location
location = location.replace(" ", "")
###Date
if daterange == "true":
date = "startdate" + "-" + "enddate"
###Source
source = source.replace(" ", "")
##Data Type
if dt == "Point":
dt = "_pt"
elif dt == "Line":
dt = "_ln"
elif dt == "Polygon":
dt = "_py"
elif dt == "Raster":
dt = "_ra"
elif dt == "Non-feature Attribute Table":
dt = "_tbl"
#Assign layer name
##Form new name
layername = unit + sunit + sens + cat + location + date + source + dt
layername = layername.replace("__", "_").replace(" ", "")
##Assign name to feature class
arcpy.management.Rename = (FC, layername, "FeatureClass")
您的脚本有几个问题...我只想指出其中一些。您应该清理脚本并使其更容易出错。
主要问题
arcpy.management.Rename
是一个函数,而不是一个属性。您不能分配元组。删除等号(=
):# DOES NOT WORK: arcpy.management.Rename = (FC, layername, "FeatureClass")
arcpy.management.Rename(FC, layername, "FeatureClass")
次要问题(如果使用地理数据库中的要素类)
-
。将这个字符替换为另一个字符。例如:date = "startdate" + "_" + "enddate"
其他一些问题
"startdate"
和 "enddate"
。我认为这不是故意的。去掉引号:date = startdate + "_" + enddate
假设
startdate
和enddate
是字符串,如果它们是datetime
或date
对象,那么你可能需要使用strftime
来格式化它们。
date
从参数中读取,但如果 daterange
为 "true"
,则设置。当 date
为其他值时,daterange
不会被格式化。
daterange
真的是字符串而不是布尔值吗?
如果
cat
字符串中没有 -
会发生什么?
如果
dt
都不是这两个选项怎么办?我假设您有一个下拉菜单,但事实并非如此。
这是一个带有一些测试参数的工作示例,以便从终端运行它。请注意,我只纠正了下面示例中的主要问题(问题 1 和问题 2):
import arcpy
FC = r"D:\test\Washrooms.gdb\Washrooms"
unit = ""
sunit = ""
sens = "Yes, at the feature level"
cat = "Test Category - Some Description"
name = "Washroom Features"
location = ""
daterange = "true" # or boolean?
date = "" # why? date is overwritten later...
startdate = "08/05/1989" # or datetime?
enddate = "30/08/2003" # or datetime?
resolution = ""
source = ""
dt = "Point" # must be a dropdown, right?
if unit != "":
unit = unit + "_"
if sunit != "":
sunit = unit + "_"
if sens == "Yes":
sens = "SENSITIVE_"
elif sens == "Yes, at the feature level":
sens = "SENSITIVEFL_"
cat = cat.split(" -")[0] + "_"
location = location.replace(" ", "")
if daterange == "true":
date = "startdate" + "_" + "enddate"
source = source.replace(" ", "")
if dt == "Point":
dt = "_pt"
elif dt == "Line":
dt = "_ln"
elif dt == "Polygon":
dt = "_py"
elif dt == "Raster":
dt = "_ra"
elif dt == "Non-feature Attribute Table":
dt = "_tbl"
layername = unit + sunit + sens + cat + location + date + source + dt
layername = layername.replace("__", "_").replace(" ", "")
arcpy.management.Rename(FC, layername, "FeatureClass")