Arcpy.ValidateFieldName不验证字段名称?

时间:2015-07-29 16:08:18

标签: python validation arcgis arcpy arcmap

我正在使用Arcpy处理Python脚本。它创建一个形状文件,然后使用来自用户输入的名称向其添加字段。从用户输入的字符串中我需要生成一个有效的字段名称。我以为arcpy.ValidateFieldName()会做到这一点。但是,我遇到了问题。请考虑以下代码:

#Create a new shapefile.
arcpy.CreateFeatureclass_management(r"C:\path\to\file", "shape.shp")

#Validate the fieldname.
name = arcpy.ValidateFieldName("0FIELD", "shape")

#Add the field
arcpy.AddField_management("shape", name, "TEXT")

即使字段名称已经过验证,也会引发错误:

  

运行时错误Traceback(最近一次调用最后一次):
    文件"",第1行,在     文件" C:\ script.py",第8行,在arcpy.AddField_management中("形状",名称," TEXT")
    文件" c:\程序文件(x86)\ arcgis \ desktop10.2 \ arcpy \ arcpy \ management.py",第3200行,在AddField中       raise e ExecuteError:ERROR 000310:字段名称不能以数字

开头

该函数更正了其他不允许的字符(例如用下划线替换空格,并将字符串限制为10个字符),但它错过了对第一个字符作为数字的操作,即使形状文件字段名称中不允许这样做

这是一个错误,还是我错误地使用arcpy.ValidateFieldName()?我应该使用其他一些功能吗?或者我必须自己写一个?那一个应该是什么样的?

编辑1:使用形状文件的完整路径和文件名替换ValidateFieldName的第二个参数无济于事。

编辑2:从ArcCatalog添加名为0FIELD的字段时,它可以正常工作。因此,这不是验证的问题,而AddField_management似乎不允许以数字开头的字段名称,即使它不应该。

2 个答案:

答案 0 :(得分:1)

我认为问题是arcpy.ValidateFieldName的第二个参数必须是工作空间的路径。

例如:

name = arcpy.ValidateFieldName("0FIELD", r"C:\your_workspace.gdb")

这是为了让函数根据您正在使用的工作区类型生成有效的字段名称。

祝你好运,

汤姆

答案 1 :(得分:0)

我一直与ESRI支持人员联系,根据他们的说法,这是ArcMap 10.2的一个问题,已在10.3中修复。但是,无法验证。