Lo que necesito hacer:
- cambiar el nombre de un campo de una tabla / clase de entidad
- copiar todos los valores al nuevo campo
Hasta ahora he hecho el siguiente código como @ artwork21 sugiere:
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)
¿Cómo puedo asignar field.type
al AddField_management
tipo de campo del método? Y mientras el campo está en un lugar intermedio, el campo se elimina del medio y se agrega al último. Eso no parece que se cambie el nombre del campo.
¿Hay alguna solución mejor que me ayude a hacer estas cosas?
old_field
un nombre de variable o el nombre real del campo anterior? Si se trata de un nombre de variable, debe utilizar el formato de cadena o la concatenación para ajustar el valor de la variable con los corchetes (analizador VB) o los signos de exclamación (analizador Python).Respuestas:
Pruebe esto usando una combinación de las herramientas Agregar campo, Calcular campo y Eliminar campo:
fuente
fieldInfo.addField ("status", "stat", "VISIBLE", "NONE")
lugar defieldInfo.setNewName(index, "stat")
. Pero el mismo error ocurrió con mi código.Ahora puede cambiar el nombre de un campo con la herramienta básica ArcGIS Desktop GP: Alterar campo (Administración de datos) . Esta herramienta proporciona la capacidad de cambiar el nombre de los campos o cambiar el nombre de los alias de campo para cualquier tabla de geodatabase o clase de entidad.
Esta herramienta está disponible a partir de 10.2.1 .
fuente
Para cambiar el nombre de un campo en una tabla o clase de entidad, probaría el procedimiento descrito aquí .
Acabo de probar esto en una tabla de geodatabase de archivos usando ArcGIS for Desktop Standard 10.1 SP1 y funcionó bien.
Desafortunadamente, después de escribir esto, busqué el archivo PDF What's New in ArcGIS 10.1 y descubrí que esta funcionalidad puede haberse agregado en esa versión, pero aún así podría valer la pena probar el último paquete de servicio de 10.0 para ver si también fue portado de nuevo allí.
fuente
Dos grandes problemas con el código:
si dataType no es un FeatureLayer, el programa omitirá las manipulaciones de información de campo y luego intentará establecer el valor en un campo nuevo / renombrado que nunca fue creado / renombrado
Las dos lineas:
gValue = row.getValue("status")
row.setValue("stat", gValue)
tiene un gran problema Si el código anterior funcionó El campo "estado" no existe.
fuente
Esto se hace automáticamente, de acuerdo con esta publicación .
Como mencioné en su otra pregunta , sus únicas otras opciones son soltar y volver a crear toda la clase / tabla de entidad o modificar la definición de columna en el DBMS subyacente.
Supongo que podría eliminar todas las columnas de usuario y volver a crearlas en el orden deseado, pero eso es un poco loco. El script en esta respuesta hace exactamente eso, probablemente podría adaptarlo a sus necesidades.
fuente