Estoy tratando de editar la longitud de todos los campos de texto en una clase de característica. La clase de característica tiene un montón de campos así que quiero hacer esto en python. Sólo tengo acceso a v10.1 por lo que no puede utilizar la opción AlterField_management.
Mi método consiste en utilizar la conversión de fc a fc con una asignación de campos adecuada.
Abajo está mi código pero no altera la longitud de los campos de texto como se pretende. La conversión de fc a fc sigue adelante pero sin cambios en ninguna de las propiedades de los campos. Estoy bastante seguro de que el problema es con el mapeo de campo, pero no puedo averiguarlo.
import arcpy
infc = r"C:\path to original fc"
out_space = r"C:\path to out gdb"
out_fc = "fc_newfieldlengths"
# set up field mappings object
fms = arcpy.FieldMappings()
# Create list of all non-string fields to skip when creating the fieldmaps
text_fields = arcpy.ListFields(infc, field_type = 'String')
all_fields = arcpy.ListFields(infc)
skip_fields = [x for x in all_fields if x not in text_fields]
# create field mapping with new length for the text fields
for field in all_fields:
if field in skip_fields:
pass
else:
fm = arcpy.FieldMap()
fm.addInputField(infc, field.name)
outfield = fm.outputField
outfield.length = 150
outfield.name = field.name
fm.outputField = outfield
fms.addFieldMap(fm)
# Copy featureclass with new field mapping
arcpy.FeatureClassToFeatureClass_conversion(infc, out_space, out_fc, field_mapping = fms)
# End of script
Si sólo intentaba recorrer una lista de campos de cadena para generar los mapas de campo, descubría que todos los campos se convertían en campos de cadena en la salida, no sólo los campos que me interesaba modificar.
Para evitar cambiar el tipo de datos de todos los campos, he creado una lista de omisión de los campos que no se deben modificar. De este modo, se conservan los tipos de datos, pero no se modifican las longitudes de los campos de texto (como ocurría anteriormente, pero también resulta molesto cambiar todos los tipos de datos).
Sospecho que no entiendo las asignaciones de campos lo suficientemente bien como para saber qué estoy haciendo mal.