Co muszę zrobić:
- zmień nazwę nazwy tabeli / klasy obiektów
- skopiuj wszystkie wartości do nowego pola
Do tej pory zrobiłem następujący kod, jak sugeruje @ 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)
Jak mogę odwzorować field.type
na AddField_management
typ pola metody? A gdy pole znajduje się na środkowym miejscu, wówczas pole jest usuwane ze środka i dodawane do ostatniego. Nie wygląda to tak, jakby nazwa pola została zmieniona.
Czy jest jakieś lepsze rozwiązanie, które pomaga mi robić te rzeczy?
old_field
nazwa zmiennej lub rzeczywista nazwa starego pola? Jeśli jest to nazwa zmiennej, musisz użyć formatowania łańcucha lub konkatenacji, aby zawrzeć wartość zmiennej w nawiasach (parser VB) lub wykrzyknikach (parser Python).Odpowiedzi:
Wypróbuj to, używając kombinacji narzędzi Arcpy Dodaj pole, Oblicz pole i Usuń pole:
źródło
fieldInfo.addField ("status", "stat", "VISIBLE", "NONE")
zamiastfieldInfo.setNewName(index, "stat")
. Ale ten sam błąd wystąpił w moim kodzie.Możesz teraz zmienić nazwę pola za pomocą podstawowego narzędzia ArcGIS Desktop GP - Alter Field (zarządzanie danymi) . To narzędzie umożliwia zmianę nazwy pól lub zmianę aliasów pól dla dowolnej tabeli geobazy lub klasy obiektów.
To narzędzie jest dostępne od wersji 10.2.1 .
źródło
Aby zmienić nazwę pola w tabeli lub klasie elementów, spróbowałbym wykonać procedurę opisaną tutaj .
Właśnie przetestowałem to na tabeli geobazy danych pliku przy użyciu ArcGIS dla Desktop Standard 10.1 SP1 i działało dobrze.
Niestety, po napisaniu tego, przeszukałem plik PDF Co nowego w ArcGIS 10.1 i stwierdziłem, że ta funkcja mogła zostać dodana w tej wersji - nadal warto przetestować najnowszy dodatek Service Pack 10.0, aby sprawdzić, czy również został tam z powrotem przeniesiony.
źródło
dwa duże problemy z kodem:
jeśli dataType nie jest FeatureLayer, program pominie manipulacje fieldinfo, a następnie spróbuje ustawić wartość na nowe / zmienione pole, którego nigdy nie utworzono / zmieniono nazwę
Dwie linie:
gValue = row.getValue("status")
row.setValue("stat", gValue)
mam duży problem. Jeśli wcześniejszy kod działał Pole „status” nie istnieje.
źródło
Odbywa się to automatycznie, zgodnie z tym postem .
Jak wspomniałem w drugim pytaniu , jedynymi innymi opcjami są upuszczenie i odtworzenie całej klasy / tabeli funkcji lub zmodyfikowanie definicji kolumny w bazowym systemie DBMS.
Przypuszczam, że mogłoby usunąć wszystkie kolumny użytkowników i ponownie utworzyć je w odpowiedniej kolejności, ale to trochę szalony. Skrypt w tej odpowiedzi właśnie to robi, prawdopodobnie możesz go dostosować do swoich potrzeb.
źródło