O que eu preciso fazer:
- renomear um nome de campo de uma tabela / classe de recurso
- copie todos os valores para o novo campo
Até agora, fiz o seguinte código, como sugere @ 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)
Como posso mapear field.type
para AddField_management
o tipo de campo do método? E enquanto o campo estiver em um local intermediário, o campo será excluído do meio e adicionado ao último. Isso não parece como se o nome do campo fosse renomeado.
Existe alguma solução melhor que me ajude a fazer essas coisas?
old_field
um nome de variável ou o nome real do campo antigo? Se for um nome de variável, você precisará usar a formatação ou concatenação de seqüência de caracteres para agrupar o valor da variável entre colchetes (analisador VB) ou pontos de exclamação (analisador Python).Respostas:
Tente fazer isso usando uma combinação das ferramentas do arco Adicionar campo, Calcular campo e Excluir campo:
fonte
fieldInfo.addField ("status", "stat", "VISIBLE", "NONE")
vez defieldInfo.setNewName(index, "stat")
. Mas o mesmo erro aconteceu com o meu código.Agora você pode renomear um campo usando a ferramenta principal do ArcGIS Desktop GP - Alter Field (Gerenciamento de dados) . Essa ferramenta fornece a capacidade de renomear campos ou renomear aliases de campo para qualquer tabela de geodatabase ou classe de recurso.
Esta ferramenta está disponível a partir do 10.2.1 .
fonte
Para renomear um campo em uma tabela ou classe de recurso, eu tentaria o procedimento descrito aqui .
Acabei de testar isso em uma tabela de geodatabase usando o ArcGIS for Desktop Standard 10.1 SP1 e funcionou bem.
Infelizmente, depois de escrever isso, pesquisei o arquivo PDF What's New in ArcGIS 10.1 e descobri que essa funcionalidade pode ter sido adicionada nessa versão - ainda pode valer a pena testar o service pack mais recente da 10.0 para ver se ele também foi portado para lá.
fonte
dois grandes problemas com o código:
se o dataType não for um FeatureLayer, o programa ignorará as manipulações de informações de campo e tentará definir o valor para um campo novo / renomeado que nunca foi criado / renomeado
As duas linhas:
gValue = row.getValue("status")
row.setValue("stat", gValue)
tem um grande problema. Se o código anterior funcionou O campo "status" não existe.
fonte
Isso é feito automaticamente, de acordo com este post .
Como mencionei em sua outra pergunta , suas únicas outras opções são eliminar e recriar toda a classe / tabela de recursos ou modificar a definição de coluna no DBMS subjacente.
Suponho que você possa excluir todas as colunas do usuário e recriá-las na ordem desejada, mas isso é um pouco louco. O script nesta resposta faz exatamente isso, você provavelmente pode adaptá-lo às suas necessidades.
fonte