Arcpy.ValidateFieldName 不验证字段名称?

Arcpy.ValidateFieldName does not validate field name?

我正在使用 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")

即使字段名称已经过验证,它也会抛出错误:

Runtime error Traceback (most recent call last):
File "", line 1, in
File "C:\script.py", line 8, in
arcpy.AddField_management("shape", name, "TEXT")
File "c:\program files (x86)\arcgis\desktop10.2\arcpy\arcpy\management.py", line 3200, in AddField
raise e ExecuteError: ERROR 000310: The Field name must not start with a number

该函数纠正了其他不允许的字符(例如用下划线替换空格,并将字符串限制为 10 个字符),但是它没有对第一个字符为数字做一些事情,即使这在形状文件中是不允许的字段名称。

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

编辑 1: 用形状文件的完整路径和文件名替换 ValidateFieldName 的第二个参数没有帮助。

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

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

例如:

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

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

祝你好运,

汤姆

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