He escrito un script de Python usando arcpy que genera una clase de entidad poligonal en una Geodatabase de archivos. He agregado una función para exportar los atributos a un archivo CSV separado. Estoy usando el código que he encontrado en esta publicación que funciona perfectamente. Sin embargo, ese código exporta todas las columnas de la clase de entidad. Sólo quiero exportar los campos que no tienen los siguientes nombres: OBJECTID
, Shape
o Shape_Length
.
Mi archivo CSV se genera correctamente y no incluye correctamente los campos OBJECTID
o Shape_Length
. Sin embargo, el Shape
campo se escribe en el archivo. Un valor de ejemplo que se escribe en ese campo es:
<geoprocessing describe geometry object object at 0x28CB90A0>
He agregado una línea para imprimir los nombres de los campos a medida que los recorre y, sorprendentemente, Shape
no se imprime. Es como si ArcGIS lo estuviera ocultando o le diera un nombre diferente.
El código para mi función está abajo:
def exportToTable():
"""
Exports the final outputs to a CSV File.
"""
# Create path to CSV File (note the varialbe outputPath is declared elsewhere).
CSVFile = outputPath+'\\FinalOutput.csv'
arcpy.AddMessage("Created CSV File: %s" %CSVFile)
# Get all fields in FinalOutput feature class and remove unwanted fields.
fields = arcpy.ListFields('FinalOutput')
for field in fields:
arcpy.AddMessage("Field.name is:"+field.name) #not printing 'Shape' field name
if field.name in (['OBJECTID', 'Shape', 'Shape_Length']):
fields.remove(field)
i = 1
f=open(CSVFile, 'w')
for field in fields:
#--write the wanted field names to the output file
if i < len(fields):
f.write('%s,' % field.name)
i += 1
else:
f.write('%s\n' % field.name)
# Use a search cursor to iterate through the rows of the table and write them to the CSV file.
rows = arcpy.SearchCursor('FinalOutput')
for row in rows:
i = 1
for field in fields:
if i < len(fields):
f.write('%s,' % row.getValue(field.name))
i += 1
else:
f.write('%s\n' % row.getValue(field.name))
del rows
f.close()
¿Alguien sabe lo que está pasando aquí?
Modifiqué mi código para seguir el consejo de @sgrieve y todavía estaba escribiendo el Shape
campo. Si agrego una línea para imprimir los nombres de los campos a medida que los recorre, enumera todos los campos excepto el Shape
campo, pero aún escribe en el CSV. También agregó las coordenadas X e Y del polígono como dos nuevas columnas y las columnas ya no están alineadas con los nombres de las columnas.
Modifiqué la línea donde @sgrieve declara que los campos son los siguientes:
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
El nuevo código funciona bien, pero aún no estoy seguro de cuál era el problema. ¿Alguien sabe lo que estaba pasando? ¿Cuál es el trato con el Shape
campo?
Shape
campo se estaba escribiendo en el archivo? Si bien el código de @ sgrieve posiblemente mejoró mi código, no resolvió el problema.