Я написав сценарій python, використовуючи arcpy, який виводить клас функції багатокутника у File Geodatabase. Я додав функцію експорту атрибутів в окремий файл 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, можливо, покращив мій код, це не вирішило проблему.