Napisałem skrypt Pythona za pomocą arcpy, który wyświetla klasę wielokątów w Geobazie Pliku. Dodałem funkcję eksportowania atrybutów do osobnego pliku CSV. Używam kodu, który znalazłem w tym poście, który działa idealnie. Jednak ten kod eksportuje każdą kolumnę w klasie elementów. Chcę tylko, aby wyeksportować pól, które nie mają następujące nazwy: OBJECTID
, Shape
, lub Shape_Length
.
Mój plik CSV generuje się pomyślnie i poprawnie nie zawiera pól OBJECTID
lub Shape_Length
. Jednak Shape
pole jest zapisywane w pliku. Przykładowa wartość zapisana w tym polu to:
<geoprocessing describe geometry object object at 0x28CB90A0>
Dodałem wiersz, aby wydrukować nazwy pól podczas ich iteracji i, co zaskakujące, Shape
nie jest drukowany. To tak, jakby ArcGIS ukrywa go lub nadaje mu inną nazwę.
Kod mojej funkcji znajduje się poniżej:
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()
Czy ktoś wie, co się tutaj dzieje?
Zmodyfikowałem swój kod, aby postępować zgodnie z radą @sgrieve i nadal pisałem to Shape
pole. Jeśli dodać linię do wydrukowania nazwy pól jak to iteracje przez nich, to wymienia wszystkie pola z wyjątkiem tej Shape
dziedzinie, a mimo to nadal zapisuje do pliku CSV. Dodano także współrzędne X i Y wielokąta jako dwie nowe kolumny, a kolumny nie są już wyrównane z nazwami kolumn.
Zmodyfikowałem wiersz, w którym @sgrieve deklaruje następujące pola:
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
Nowy kod działa dobrze, ale nadal nie jestem pewien, na czym polegał problem. Czy ktoś wie, co się działo? O co chodzi z Shape
polem?
Shape
pole zostało zapisane do pliku? Chociaż kod @ sgrieve prawdopodobnie poprawił mój kod, nie rozwiązał problemu.