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 中修复。但是,无法验证这一点。
我正在使用 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 中修复。但是,无法验证这一点。