Я написал скрипт на python с использованием arcpy, который выводит класс пространственных объектов многоугольника в базу геоданных файлов. Я добавил функцию для экспорта атрибутов в отдельный файл CSV. Я использую код, который я нашел в этом посте, который отлично работает. Однако этот код экспортирует каждый столбец в классе объектов. Я только хочу , чтобы экспортировать поля , которые не имеют следующие названия: OBJECTID
, Shape
или Shape_Length
.
Мой файл CSV генерируется успешно, и он правильно не включает поля OBJECTID
или Shape_Length
. Тем не менее, Shape
поле будет записано в файл. Пример значения, которое записывается в это поле:
<geoprocessing describe geometry object object at 0x28CB90A0>
Я добавил строку для печати имен полей, так как они проходят через них и, Shape
как ни странно, не печатаются. Как будто ArcGIS скрывает его или дает другое имя.
Код для моей функции ниже:
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()
Кто-нибудь знает, что здесь происходит?
Я изменил свой код, следуя совету @sgrieve, и он все еще писал Shape
поле. Если добавить строку , чтобы напечатать имена полей , как он перебирает через них, в нем перечислены все поля , за исключением в Shape
поле, но он до сих пор пишет в CSV. Также добавлены координаты X и Y многоугольника в виде двух новых столбцов, и столбцы больше не выровнены с именами столбцов.
Я изменил строку, где @sgrieve объявляет следующие поля:
fields = [f.name for f in arcpy.ListFields('FinalCadastre') if f.type <> 'Geometry']
Новый код работает нормально, но я все еще не уверен, в чем проблема. Кто-нибудь знает, что происходит? Что за дело с Shape
полем?
Shape
поле было записано в файл? Хотя код @ sgrieve, возможно, улучшил мой код, он не решил проблему.