Eu escrevi um script python usando arcpy, que gera uma classe de recurso de polígono em um geodatabase de arquivo. Eu adicionei uma função para exportar os atributos para um arquivo CSV separado. Estou usando o código que encontrei neste post que funciona perfeitamente. No entanto, esse código exporta todas as colunas da classe de recurso. Eu só quero exportar os campos que não têm os seguintes nomes: OBJECTID
, Shape
ou Shape_Length
.
Meu arquivo CSV é gerado com êxito e não inclui corretamente os campos OBJECTID
ou Shape_Length
. No entanto, o Shape
campo é gravado no arquivo. Um valor de exemplo que é gravado nesse campo é:
<geoprocessing describe geometry object object at 0x28CB90A0>
Eu adicionei uma linha para imprimir os nomes dos campos, uma vez que itera através deles e, surpreendentemente, Shape
não é impressa. É como se o ArcGIS estivesse escondendo ou dando um nome diferente.
O código para minha função está abaixo:
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()
Alguém sabe o que está acontecendo aqui?
Modifiquei meu código para seguir os conselhos de @sgrieve e ele ainda estava escrevendo o Shape
campo. Se eu adicionar uma linha para imprimir os nomes dos campos conforme itera, eles listarão todos os campos, exceto o Shape
campo, e ainda assim serão gravados no CSV. Ele também adicionou as coordenadas X e Y do polígono como duas novas colunas e as colunas não estão mais alinhadas com os nomes das colunas.
Modifiquei a linha em que @sgrieve declara os campos como os seguintes:
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
O novo código funciona bem, mas ainda não tenho certeza qual era o problema. Alguém sabe o que estava acontecendo? Qual é o problema com o Shape
campo?
Shape
campo estava sendo gravado no arquivo? Embora o código do @ sgrieve tenha melhorado meu código, ele não resolveu o problema.