Ce que je dois faire:
- renommer un nom de champ d'une table / classe d'entités
- copier toutes les valeurs dans le nouveau champ
Jusqu'à présent, j'ai fait le code suivant comme le suggère @ 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)
Comment mapper field.type
au AddField_management
type de champ de la méthode? Et tandis que le champ est au milieu, le champ est supprimé du milieu et ajouté au dernier. Cela ne ressemble pas à un nom de champ renommé.
Y a-t-il une meilleure solution qui m'aide à faire ces choses?
old_field
un nom de variable ou le nom réel de l'ancien champ? S'il s'agit d'un nom de variable, vous devez utiliser le formatage de chaîne ou la concaténation pour encapsuler la valeur de la variable avec les crochets (analyseur VB) ou les points d'exclamation (analyseur Python).Réponses:
Essayez ceci en utilisant une combinaison d'outils Ajouter un champ, Calculer un champ et Supprimer un champ arcpy:
la source
fieldInfo.addField ("status", "stat", "VISIBLE", "NONE")
au lieu defieldInfo.setNewName(index, "stat")
. Mais la même erreur s'est produite avec mon code.Vous pouvez désormais renommer un champ à l'aide de l'outil principal d'ArcGIS Desktop GP - Modifier le champ (gestion des données) . Cet outil permet de renommer des champs ou de renommer des alias de champs pour n'importe quelle table ou classe d'entités de géodatabase.
Cet outil est disponible à partir de 10.2.1 .
la source
Pour renommer un champ dans une table ou une classe d'entités, j'essayerais la procédure décrite ici .
Je viens de tester cela sur une table de géodatabase fichier à l'aide d'ArcGIS for Desktop Standard 10.1 SP1 et cela a bien fonctionné.
Malheureusement, après avoir écrit ceci, j'ai recherché le fichier PDF Quoi de neuf dans ArcGIS 10.1 et j'ai constaté que cette fonctionnalité avait peut-être été ajoutée à cette version - il pourrait être utile de tester le dernier service pack de 10.0 pour voir s'il y était également porté.
la source
deux gros problèmes avec le code:
si le dataType n'est pas un FeatureLayer, le programme sautera les manipulations fieldinfo, puis essaiera de définir la valeur sur un nouveau champ / renommé qui n'a jamais été créé / renommé
Les deux lignes:
gValue = row.getValue("status")
row.setValue("stat", gValue)
ont un gros problème. Si le code précédent fonctionnait Le champ "status" n'existe pas.
la source
Cela se fait automatiquement, selon cet article .
Comme je l'ai mentionné dans votre autre question , vos seules autres options sont de supprimer et de recréer l'ensemble de la classe / table d'entités ou de modifier la définition de colonne dans le SGBD sous-jacent.
Je suppose que vous pouvez supprimer toutes les colonnes utilisateur et les recréer dans l'ordre souhaité, mais c'est un peu fou. Le script de cette réponse fait exactement cela, vous pouvez probablement l'adapter à vos besoins.
la source