Was ich tun muss:
- Benennen Sie einen Feldnamen einer Tabelle / Feature-Class um
- Kopieren Sie alle Werte in das neue Feld
Bisher habe ich folgenden Code ausgeführt, wie @ artist21 vorschlägt:
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)
Wie kann ich dem Feldtyp field.type
der AddField_management
Methode zuordnen? Und während sich das Feld in der Mitte befindet, wird das Feld aus der Mitte gelöscht und zum letzten hinzugefügt. Das sieht nicht so aus, als würde der Feldname umbenannt.
Gibt es eine bessere Lösung, die mir dabei hilft?
old_field
ein Variablenname oder der tatsächliche Name des alten Feldes? Wenn es sich um einen Variablennamen handelt, müssen Sie die Formatierung oder Verkettung von Zeichenfolgen verwenden, um den Wert der Variablen in Klammern (VB-Parser) oder Ausrufezeichen (Python-Parser) zu setzen.Antworten:
Versuchen Sie dies mit einer Kombination aus Arcpy-Werkzeugen "Feld hinzufügen", "Feld berechnen" und "Feld löschen":
quelle
fieldInfo.addField ("status", "stat", "VISIBLE", "NONE")
anstattfieldInfo.setNewName(index, "stat")
. Aber der gleiche Fehler ist mit meinem Code passiert.Sie können ein Feld jetzt mit dem ArcGIS Desktop GP-Kerntool - Feld ändern (Datenverwaltung) umbenennen . Dieses Tool bietet die Möglichkeit, Felder oder Feldaliasnamen für jede Geodatabase-Tabelle oder Feature-Class umzubenennen.
Dieses Tool ist ab 10.2.1 verfügbar .
quelle
Um ein Feld in einer Tabelle oder Feature-Class umzubenennen, würde ich das hier beschriebene Verfahren ausprobieren .
Ich habe dies gerade an einer Datei-Geodatabase-Tabelle mit ArcGIS für Desktop Standard 10.1 SP1 getestet und es hat einwandfrei funktioniert.
Leider habe ich nach dem Schreiben der PDF-Datei "Was ist neu in ArcGIS 10.1" gesucht und festgestellt, dass diese Funktionalität möglicherweise in dieser Version hinzugefügt wurde. Es könnte sich jedoch lohnen, das neueste Service Pack 10.0 zu testen, um festzustellen, ob es auch dort wieder portiert wurde.
quelle
zwei große Probleme mit dem Code:
Wenn der Datentyp kein FeatureLayer ist, überspringt das Programm die Feldinfo-Manipulationen und versucht dann, den Wert auf ein neues / umbenanntes Feld festzulegen, das nie erstellt / umbenannt wurde
Die zwei Zeilen:
gValue = row.getValue("status")
row.setValue("stat", gValue)
habe ein großes Problem. Wenn der frühere Code funktioniert hat Das Feld "Status" existiert nicht.
quelle
Dies erfolgt laut diesem Beitrag automatisch .
Wie in Ihrer anderen Frage erwähnt , können Sie nur die gesamte Feature-Class / Tabelle löschen und neu erstellen oder die Spaltendefinition im zugrunde liegenden DBMS ändern.
Ich nehme an, Sie könnten alle Benutzerspalten löschen und in der gewünschten Reihenfolge neu erstellen, aber das ist ein bisschen verrückt. Das Skript in dieser Antwort macht genau das, Sie könnten es wahrscheinlich an Ihre Bedürfnisse anpassen.
quelle