无法运行 arcpy.management.Rename

问题描述 投票:0回答:1

我正在尝试编写一个脚本,用户可以通过选择值来构建符合我们标准的要素类名称。该脚本中的其他所有内容似乎都工作正常(您可以打印图层名称并且它可以正常工作)。我没有收到错误,我尝试通过更改函数中使用的变量来强制它给我一个错误,但它仍然在半秒内完成脚本并且没有改变任何内容。

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")
python arcgis arcpy
1个回答
0
投票

您的脚本有几个问题...我只想指出其中一些。您应该清理脚本并使其更容易出错。

主要问题

  1. arcpy.management.Rename
    是一个函数,而不是一个属性。您不能分配元组。删除等号(
    =
    ):
# DOES NOT WORK: arcpy.management.Rename = (FC, layername, "FeatureClass")
arcpy.management.Rename(FC, layername, "FeatureClass")

次要问题(如果使用地理数据库中的要素类)

    地理数据库中的要素类名称中不允许使用
  1. -
    。将这个字符替换为另一个字符。例如:
date = "startdate" + "_" + "enddate"

其他一些问题

  1. 此外,在这一行中,您正在使用
    "startdate"
    "enddate"
    。我认为这不是故意的。去掉引号:
date = startdate + "_" + enddate
  1. 假设

    startdate
    enddate
    是字符串,如果它们是
    datetime
    date
    对象,那么你可能需要使用
    strftime
    来格式化它们。

  2. date
    从参数中读取,但如果
    daterange
    "true"
    ,则设置。当
    date
    为其他值时,
    daterange
    不会被格式化。

  3. daterange
    真的是字符串而不是布尔值吗?

  4. 如果

    cat
    字符串中没有
     -
    会发生什么?

  5. 如果

    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")
© www.soinside.com 2019 - 2024. All rights reserved.