Ho scritto uno script Python usando arcpy che genera una classe caratteristica poligonale in un file geodatabase. Ho aggiunto una funzione per esportare gli attributi in un file CSV separato. Sto usando il codice che ho trovato in questo post che funziona perfettamente. Tuttavia, quel codice esporta ogni colonna nella classe caratteristica. Ho solo voglia di esportare i campi che non hanno i seguenti nomi: OBJECTID
, Shape
o Shape_Length
.
Il mio file CSV viene generato correttamente e non include correttamente i campi OBJECTID
o Shape_Length
. Tuttavia, il Shape
campo è scritto nel file. Un valore di esempio scritto in quel campo è:
<geoprocessing describe geometry object object at 0x28CB90A0>
Ho aggiunto una riga per stampare i nomi dei campi mentre scorre attraverso di essi e, sorprendentemente, Shape
non viene stampato. È come se ArcGIS lo nascondesse o gli assegnasse un nome diverso.
Il codice per la mia funzione è di seguito:
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()
Qualcuno sa cosa sta succedendo qui?
Ho modificato il mio codice per seguire il consiglio di @sgrieve e stava ancora scrivendo il Shape
campo. Se aggiungo una riga per stampare i nomi dei campi mentre scorre attraverso di essi, elenca tutti i campi tranne il Shape
campo, eppure scrive ancora nel CSV. Ha anche aggiunto le coordinate X e Y del poligono come due nuove colonne e le colonne non sono più allineate con i nomi delle colonne.
Ho modificato la riga in cui @sgrieve dichiara che i campi sono i seguenti:
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
Il nuovo codice funziona bene, ma non sono ancora sicuro di quale sia stato il problema. Qualcuno sa cosa stava succedendo? Qual è il problema con il Shape
campo?
Shape
campo è stato scritto nel file? Mentre il codice di @Schrieve probabilmente ha migliorato il mio codice, non ha risolto il problema.