Что я должен сделать:
- переименовать имя поля таблицы / класса объектов
- скопировать все значения в новое поле
До сих пор я сделал следующий код, как подсказывает @ artwork21:
import sys
import traceback
import arcpy
from arcpy import env
## ARGUMENTS
# argv[1] = input table/feature class path
# argv[2] = input old field name
# argv[3] = input new field name
path = sys.argv[1]
oldFieldName = sys.argv[2]
newFieldName = sys.argv[3]
env.overwriteOutput = True
fields = arcpy.ListFields(path)
for field in fields:
if field.aliasName == oldFieldName:
if not oldFieldName == newFieldName:
fieldType = field.type
# Add new field
arcpy.AddField_management(path, newFieldName, fieldType)
#Calculates the new field based on old field values
arcpy.CalculateField_management(path, newFieldName, "!"+oldFieldName+"!", "PYTHON", "")
# Delete the old field (if necessary)
arcpy.DeleteField_management(path, oldFieldName)
Как я могу сопоставить field.type
с AddField_management
типом поля методы? И если поле находится посередине, то поле удаляется из середины и добавляется к последнему. Это не похоже на то, как будто имя поля переименовано.
Есть ли лучшее решение, которое поможет мне сделать эти вещи?
old_field
имя переменной или фактическое имя старого поля? Если это имя переменной, вам нужно использовать форматирование или конкатенацию строк, чтобы обернуть значение переменной в скобки (VB-анализатор) или восклицательные знаки (Python-анализатор).Ответы:
Попробуйте это с помощью комбинации инструментов Arcpy Add Field, Calculate Field и Delete Field:
источник
fieldInfo.addField ("status", "stat", "VISIBLE", "NONE")
вместоfieldInfo.setNewName(index, "stat")
. Но та же ошибка произошла с моим кодом.Теперь вы можете переименовать поле с помощью основного инструмента ArcGIS Desktop GP - Изменить поле (Управление данными) . Этот инструмент предоставляет возможность переименовывать поля или переименовывать псевдонимы полей для любой таблицы базы геоданных или класса пространственных объектов.
Этот инструмент доступен начиная с 10.2.1 .
источник
Чтобы переименовать поле в таблице или классе объектов, я бы попробовал описанную здесь процедуру .
Я только что проверил это на таблице файловой базы геоданных, используя ArcGIS for Desktop Standard 10.1 SP1, и она работала нормально.
К сожалению, после написания этого я искал PDF-файл «Что нового в ArcGIS 10.1» и обнаружил, что эта функциональность может быть добавлена в эту версию - тем не менее, возможно, стоит протестировать последний пакет обновления 10.0, чтобы проверить, не был ли он перенесен туда же.
источник
две большие проблемы с кодом:
если dataType не FeatureLayer, программа пропустит манипуляции с fieldinfo и попытается установить значение для нового / переименованного поля, которое никогда не создавалось / не переименовывалось
Две строки:
gValue = row.getValue("status")
row.setValue("stat", gValue)
есть большая проблема. Если предыдущий код работал, поле «статус» не существует.
источник
Это делается автоматически, согласно этому посту .
Как я уже упоминал в вашем другом вопросе , ваши единственные другие варианты - удалить и заново создать весь класс / таблицу пространственных объектов или изменить определение столбца в базовой СУБД.
Я полагаю, вы могли бы удалить все пользовательские столбцы и воссоздать их в нужном порядке, но это немного безумие. Сценарий в этом ответе делает именно это, вы, вероятно, могли бы адаптировать его к вашим потребностям.
источник