1 votos

Sintaxis de ArcPy FieldMappings mediante la herramienta Merge

Estoy trabajando en un script que toma varios resultados de tablas de la herramienta Estadísticas Zonales como Tabla y los fusiona en una sola tabla. Al fusionarlos me encuentro con el problema de que los archivos .dbf exportados tienen longitudes diferentes para un campo que necesito, "UID". La fusión toma la primera tabla añadida y utiliza esta longitud como la máxima para el campo "UID" fusionado.

¿Cómo sería la sintaxis para conseguirlo?

Este es mi código:

arcpy.Merge_management(listTable5M,outTable+"\\"+"5M_zonal_statistics_elevation_merged.dbf","UID \"UID\" true true false 25 Text 0 0,first,#")

¿Es necesario utilizar el objeto FieldMappings()?


La primera respuesta tiene mucho sentido. Sin embargo, sigo sin obtener el resultado deseado.

La fusión sigue arrojando un error. Aquí está su código implementado en el script:

dbf_list_5m = arcpy.ListTables() arcpy.AddMessage(dbf_list_5m) max_UID_length = 0 field_mappings = arcpy.FieldMappings() for table in dbf_list_5m: fields = arcpy.ListFields(table) arcpy.AddMessage(table) for field in fields: if field.name == "UID": if field.length > max_UID_length: max_UID_length = field.length arcpy.AddMessage(max_UID_length) field_mappings.removeAll() field_map = arcpy.FieldMap() field_map.addInputField(table, field.name) field_mappings.addFieldMap(field_map) arcpy.Merge_management(dbf_list_5m,outTable1+"\\"+"5M_zonal_statistics_elevation_merged.dbf", field_mappings)

Obtiene el max_UID_length (17 en este caso) pero sigue fallando durante la fusión. Puedo fusionar con éxito utilizando la herramienta gp si cambio la longitud manualmente (o añado primero la tabla con el campo 'UID' de 17 caracteres de longitud).

2voto

dotnetdev Puntos 13492
max_UID_length = 0
field_mappings = arcpy.FieldMappings()
for table in dbf_list:
    fields = arcpy.ListFields(table)
    for field in fields:
         if field.name == "UID":
              if field.length > max_UID_length:
                  max_UID_length = field.length 
                  field_mappings.removeAll()
                  field_map = arcpy.FieldMap()
                  field_map.addInputField(table, field.name)
                  field_mappings.addFieldMap(field_map)
arcpy.Merge_management(dbf_list, field_mappings)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X