ด้วยเครื่องมือผสานคุณสามารถจัดลำดับเขตข้อมูลใหม่ได้อย่างง่ายดาย มันทำงานกับตารางและชั้นเรียนคุณสมบัติ การจัดเรียงใหม่สามารถทำได้ผ่านสคริปต์ python และแม้กระทั่งกับกล่องโต้ตอบเครื่องมือ (โดยการลบฟิลด์และเพิ่มใหม่ในกล่องโต้ตอบ) แม้ว่าการสั่งซื้อซ้ำผ่านกล่องโต้ตอบนั้นไม่ใช่วิธีการที่สมบูรณ์แบบ
ขอแนะนำให้ใช้เครื่องมือผสานหนึ่งครั้งจากนั้นใช้คัดลอกเป็น Python Snippetจากนั้นเปลี่ยนคำสั่งเขตข้อมูลด้วยตนเองแล้ววางรหัสหลามในหน้าต่างหลาม
นี่คือสคริปต์หลามที่ใช้เครื่องมือผสานเพื่อจัดลำดับฟิลด์ใหม่ (คัดลอกจากที่นี่ )
import arcpy
def reorder_fields(table, out_table, field_order, add_missing=True):
"""
Reorders fields in input featureclass/table
:table: input table (fc, table, layer, etc)
:out_table: output table (fc, table, layer, etc)
:field_order: order of fields (objectid, shape not necessary)
:add_missing: add missing fields to end if True (leave out if False)
-> path to output table
"""
existing_fields = arcpy.ListFields(table)
existing_field_names = [field.name for field in existing_fields]
existing_mapping = arcpy.FieldMappings()
existing_mapping.addTable(table)
new_mapping = arcpy.FieldMappings()
def add_mapping(field_name):
mapping_index = existing_mapping.findFieldMapIndex(field_name)
# required fields (OBJECTID, etc) will not be in existing mappings
# they are added automatically
if mapping_index != -1:
field_map = existing_mapping.fieldMappings[mapping_index]
new_mapping.addFieldMap(field_map)
# add user fields from field_order
for field_name in field_order:
if field_name not in existing_field_names:
raise Exception("Field: {0} not in {1}".format(field_name, table))
add_mapping(field_name)
# add missing fields at end
if add_missing:
missing_fields = [f for f in existing_field_names if f not in field_order]
for field_name in missing_fields:
add_mapping(field_name)
# use merge with single input just to use new field_mappings
arcpy.Merge_management(table, out_table, new_mapping)
return out_table
การใช้:
new_field_order = ["field2", "field3", "field1"]
reorder_fields(in_fc, out_fc, new_field_order)