Ich habe ein Python-Skript mit arcpy geschrieben, das eine Polygon-Feature-Class in eine File-Geodatabase ausgibt. Ich habe eine Funktion zum Exportieren der Attribute in eine separate CSV-Datei hinzugefügt. Ich verwende den Code, den ich in diesem Beitrag gefunden habe und der perfekt funktioniert. Dieser Code exportiert jedoch jede Spalte in der Feature-Class. Ich möchte nur die Felder exportieren , die die folgenden Namen nicht haben: OBJECTID
, Shape
oder Shape_Length
.
Meine CSV-Datei wurde erfolgreich generiert und enthält die Felder oder nicht ordnungsgemäß . Das Feld wird jedoch in die Datei geschrieben. Ein Beispielwert, der in dieses Feld geschrieben wird, ist:OBJECTID
Shape_Length
Shape
<geoprocessing describe geometry object object at 0x28CB90A0>
Ich habe eine Zeile hinzugefügt, um die Feldnamen zu drucken, während sie durchlaufen und überraschenderweise Shape
nicht gedruckt werden. Es ist, als ob ArcGIS es verbirgt oder ihm einen anderen Namen gibt.
Der Code für meine Funktion ist unten:
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()
Weiß jemand, was hier los ist?
Ich habe meinen Code geändert, um dem Rat von @sgrieve zu folgen, und es wurde immer noch das Shape
Feld geschrieben. Wenn ich eine Zeile hinzufüge, um die Feldnamen zu drucken, während sie durchlaufen werden, werden alle Felder mit Ausnahme des Shape
Felds aufgelistet , es wird jedoch weiterhin in die CSV geschrieben. Außerdem wurden die X- und Y-Koordinaten des Polygons als zwei neue Spalten hinzugefügt und die Spalten wurden nicht mehr an den Spaltennamen ausgerichtet.
Ich habe die Zeile geändert, in der @sgrieve die folgenden Felder deklariert:
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
Der neue Code funktioniert gut, aber ich bin mir immer noch nicht sicher, was das Problem war. Weiß jemand, was los war? Was ist Shape
los mit dem Feld?
Shape
Feld in die Datei geschrieben wurde? Während der Code von @ sgrieve möglicherweise meinen Code verbesserte, konnte das Problem nicht behoben werden.