7 votos

función de copia de la clase y retener a los campos seleccionados con arcpy

Tengo un featureclass (fc) que quiero copiar, pero sólo la retención de un número seleccionado de campos, digamos que el campo 9, 11, y 12 de un total de 15 campos. Quiero usar arcpy y la sospecha de que fieldmappings de alguna manera son necesarias para este. Tengo actualmente:

fm= arcpy.FieldMappings()
fm.addtable(fc)
sel= range(0,9)+[10]+range(13,16)
for i in sel:
    fm.removeFieldMap(i)

Sin embargo, esto nos da:

RuntimeError: FieldMappings: Error in removing a field map from field mappings for RemoveFieldMap

Yo no puedo ver lo que estoy haciendo mal? Tal vez sería más bonito de alguna manera, seleccione los campos que desee y agregar a un nuevo fieldMapping objeto? Todas las sugerencias son bienvenidas, gracias de antemano!

La actualización. Como se sugiere a continuación, ahora tengo lo siguiente:

inFields= ["fA", "fB", "fC"]
inTab= 'testFc'
fm= arcpy.fieldMappings()
fieldMap= arcpy.FieldMap()
for field in inFields: 
    fieldMap.addInputField(inTab, field)
fm.addFieldMap(fieldMap)
arcpy.featureClassToFeatureClass_conversion(testFc, outDir, testOutFc, field_mapping= fm)

Esto funciona, un nuevo featureclass es creado. Sin embargo, sólo contiene un campo de fA. El python salida lee:

Executing: FeatureClassToFeatureClass L:/GEOProjects/2Working.gdb/testFc :/GEOProjecten outDir testOutFc
# "fA "fA" true true false 8 Double 0 0 ,First,#,
L:/GEOProjects/2Working.gdb/testFc,fA,-1,-1,
L:/GEOProjects/2Working.gdb/testFc,fB,-1,-1,
L:/GEOProjects/2Working.gdb/testFc,fC,-1,-1" #
Start Time: Thu Oct 24 10:21:42 2013
Succeeded at Thu Oct 24 10:21:58 2013 (Elapsed Time: 16.00 seconds)

Parece que ony fA se copian a la nueva featureclass. Alguna sugerencia de por qué esto puede ser?

6voto

CargoCult Puntos 218

Nota: he editado esta respuesta para corregir un error que destacó por encima de

El problema es que usted está quitando el mapa del campo a la mesa, y no la eliminación de los campos desde el mapa de campo. Así, se elimina el primer (y único) field-map, entonces no sabe qué hacer cuando le dices que busque el siguiente field-map.

Lo que usted necesita hacer es crear un nuevo field-map y añadir los campos que desea en ella. A continuación, añadir a su fm objeto. Sería algo como esto:

inTab = "InputTableName"
inFields = ['List','Of''Field','Names'] #case-sensitive

fm = arcpy.FieldMappings()
fieldMap = arcpy.FieldMap()
for field in fieldList:

   #creates a fieldmap with name of input field
   vars()[field] = arcpy.FieldMap()

   fieldMappings.addFieldMap(vars()[field])
   fm.AddFieldMap(vars()[field])

Tenga en cuenta que el código puede necesitar algún ajuste, pero en la dirección correcta.

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