我正在使用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
似乎不允许以数字开头的字段名称,即使它不应该。
答案 0 :(得分:1)
我认为问题是arcpy.ValidateFieldName的第二个参数必须是工作空间的路径。
例如:
name = arcpy.ValidateFieldName("0FIELD", r"C:\your_workspace.gdb")
这是为了让函数根据您正在使用的工作区类型生成有效的字段名称。
祝你好运,汤姆
答案 1 :(得分:0)
我一直与ESRI支持人员联系,根据他们的说法,这是ArcMap 10.2的一个问题,已在10.3中修复。但是,无法验证。