Arcpy.ValidateFieldName не проверяет имя поля?
Я работаю над скриптом Python, используя Arcpy. Он создает файл формы, а затем добавляет к нему поля с именами, поступающими из пользовательского ввода. Из строки, которую ввел пользователь, мне нужно создать правильное имя поля. я думал 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")
Хотя имя поля было проверено, оно выдает ошибку:
Ошибка трассировки во время выполнения (последний вызов был последним):
Файл "", строка 1, в
Файл "C:\script.py", строка 8, в
arcpy.AddField_management("shape", имя, "TEXT")
Файл "c:\program files (x86)\arcgis\desktop10.2\arcpy\arcpy\management.py", строка 3200, в AddField
повысить e ExecuteError: ОШИБКА 000310: имя поля не должно начинаться с цифры
Функция исправляет другой недопустимый символ (например, заменяя пробелы подчеркиванием и закрывая строку на 10 символов), но она не может что-то сделать с первым символом, являющимся числом, даже если это не разрешено в именах полей файла формы.
Это ошибка, или я использую arcpy.ValidateFieldName()
неправильно? Есть ли какая-то другая функция, которую я должен использовать? Или мне придется написать самому? Как это должно выглядеть?
РЕДАКТИРОВАТЬ 1: Замена второго аргумента на ValidateFieldName
с полным путем и именем файла формы не помогает.
РЕДАКТИРОВАТЬ 2: При добавлении поля с именем 0FIELD
из ArcCatalog все работает нормально. Таким образом, вместо того, чтобы быть проблемой с проверкой, кажется, что AddField_management
запрещает имена полей, начинающиеся с цифры, даже если это не так.
2 ответа
Я связывался с поддержкой ESRI, и в соответствии с ними это проблема с ArcMap 10.2, которая исправлена в 10.3. Однако я не смог это проверить.
Я считаю, что проблема заключается в том, что второй параметр arcpy.ValidateFieldName должен быть путем к рабочей области.
Например:
name = arcpy.ValidateFieldName("0FIELD", r"C:\your_workspace.gdb")
Это позволяет функции генерировать правильное имя поля в зависимости от типа рабочей области, которую вы используете.
Удачи,
Том