Apa yang perlu saya lakukan:
- ganti nama bidang dari kelas tabel / fitur
- salin semua nilai ke bidang baru
Sejauh ini saya telah melakukan kode berikut seperti yang disarankan @ 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)
Bagaimana saya bisa memetakan field.type
ke AddField_management
jenis bidang metode? Dan sementara bidang di tengah, maka bidang dihapus dari tengah dan ditambahkan ke yang terakhir. Itu tidak tampak seperti jika nama bidang diubah namanya.
Apakah ada solusi yang lebih baik yang membantu saya melakukan hal-hal ini?
old_field
nama variabel atau nama sebenarnya dari bidang lama? Jika itu nama variabel, Anda perlu menggunakan pemformatan string atau gabungan untuk membungkus nilai variabel dengan tanda kurung (parser VB) atau tanda seru (parser Python).Jawaban:
Coba ini menggunakan kombinasi alat Tambah Field, Calculate Field, dan Delete Field arcpy:
sumber
fieldInfo.addField ("status", "stat", "VISIBLE", "NONE")
bukanfieldInfo.setNewName(index, "stat")
. Tetapi kesalahan yang sama terjadi dengan kode saya.Anda sekarang dapat mengganti nama bidang menggunakan alat ArcGIS Desktop GP inti - Alter Field (Manajemen Data) . Alat ini menyediakan kemampuan untuk mengubah nama bidang atau mengubah nama alias bidang untuk tabel geodatabase atau kelas fitur apa pun.
Alat ini tersedia mulai dari 10.2.1 .
sumber
Untuk mengganti nama bidang dalam tabel atau kelas fitur, saya akan mencoba prosedur yang dijelaskan di sini .
Saya baru saja menguji ini pada tabel file geodatabase menggunakan ArcGIS untuk Desktop Standar 10.1 SP1 dan itu bekerja dengan baik.
Sayangnya, setelah menulis ini saya mencari file PDF ArcGIS 10.1 yang baru dan menemukan bahwa fungsionalitas ini mungkin telah ditambahkan pada versi itu - masih layak untuk menguji paket layanan terbaru 10.0 untuk melihat apakah porting itu kembali porting di sana juga.
sumber
dua masalah besar dengan kode:
jika dataType bukan FeatureLayer, program akan melewati manipulasi fieldinfo, dan kemudian mencoba mengatur nilainya ke bidang baru / diganti namanya yang tidak pernah dibuat / diganti namanya
Dua baris:
gValue = row.getValue("status")
row.setValue("stat", gValue)
punya masalah besar. Jika kode sebelumnya berfungsi, kolom "status" tidak ada.
sumber
Ini dilakukan secara otomatis, sesuai dengan posting ini .
Seperti yang saya sebutkan dalam pertanyaan Anda yang lain , satu-satunya pilihan Anda adalah membuang dan membuat ulang seluruh kelas / tabel fitur atau memodifikasi definisi kolom dalam DBMS yang mendasarinya.
Saya kira Anda bisa menghapus semua kolom pengguna dan membuatnya kembali dalam urutan yang diinginkan tapi itu sedikit gila. Skrip dalam jawaban ini tidak persis seperti itu, Anda mungkin dapat menyesuaikannya dengan kebutuhan Anda.
sumber