Более

Экспорт классов пространственных объектов из базы геоданных в CSV

Экспорт классов пространственных объектов из базы геоданных в CSV


Я пытаюсь экспортировать классы пространственных объектов в базе геоданных в формат CSV с помощью «Экспортировать атрибут объекта в ASCII» в ArCGIS. Я получаю следующую ошибку

Отслеживание (последний вызов последним): файл "c:  program files (x86)  arcgis  desktop10.2  ArcToolbox  Scripts  ExportXYV.py", строка 159, в  export = setupXYV () Файл "c:  program files (x86)  arcgis  desktop10.2  ArcToolbox  Scripts  ExportXYV.py", строка 49, в setupXYV outFieldNames = outFieldNames) Файл "c:  program files (x86)  arcgis  desktop10.2  ArcToolbox  Scripts  ExportXYV.py ", строка 129, в формате exportXYVValue = LOCALE.format (localeDict [поле], значение) Файл" C:  Python27  ArcGIS10.2  lib  locale.py ", строка 196, в формате return _format (процент, значение, группировка, денежное выражение, * дополнительный) Файл" C:  Python27  ArcGIS10.2  lib  locale.py ", строка 202, в формате _format formatted = процент% значения TypeError : не все аргументы конвертируются во время форматирования строки

Вот скрипт Python, который я использую

import arcpy from arcpy import env import os, sys arcpy.CheckOutExtension ("пространственный") arcpy.env.overwriteOutput = True # Установить параметры среды workspace = r'L:  Simulation  Output  PoolVariables.gdb '# Установить локальные переменные outWorkspace = r'L:  Simulation  Output  CreateCSV 'feature_classes = [] для dirpath, dirnames, filenames в arcpy.da.Walk (workspace, datatype = "FeatureClass", type = "Point"): для имени файла в именах файлов: feature_classes. append (os.path.join (dirpath, filename)) #print feature_classes # Перебрать список классов объектов try: для fc в классах функций: field_names = [f.name для f в arcpy.ListFields (fc)] print field_names # arcpy.ExportXYV_stats (fc, field_names, "COMMA",) name = os.path.basename (fc) # Извлечь только базовое имя FC arcpy.ExportXYv_stats (fc, field_names, "COMMA", name, "ADD_FIELD_NAMES") кроме: print arcpy.GetMessages ()

Может кто-нибудь объяснить, что здесь происходит?


Я вижу проблему ... независимо от того, какой формат выбран, записывается .dbf. Что ж, это определенно изменилось с тех пор, как я последний раз использовал эти инструменты. Увидев, что вы используете Python, возможно, здесь поможет небольшая рутина:

def WriteCsv (InFC, OutTab): print ("Экспорт% s в% s"% (InFC, OutTab)) с open (OutTab, 'w') как OutFile: FieldNames = [x.name для x в arcpy.ListFields ( InFC)] # преобразовать поля в имена ... # пропустить поле формы, оно все равно не будет хорошо печататься desc = arcpy.Describe (InFC) if (desc.datasetType == 'FeatureClass'): try: FieldNames.remove (desc. shapeFieldName) except: arcpy.AddWarning («Невозможно пропустить поле формы, возможно, оно не существует») # выводит строку заголовка в текстовый файл OutFile.write (','. join (FieldNames)) # запятую форматирует поле names OutFile.write (' n') # новая строка с arcpy.da.SearchCursor (InFC, FieldNames) как Scur: для строки в Scur: OutFile.write (','. join (map (str, row))) # форматирование строки запятой OutFile.write (' n') # новая строка

Что будет взаимодействовать с вашей программой следующим образом:

import os, sys, arcpy # from arcpy import env # не требуется - неявно указано в этом скрипте # arcpy.CheckOutExtension ("пространственный") # не требуется - инструменты arcpy.sa не используются arcpy.env.overwriteOutput = True def WriteCsv (InFC , OutTab): с open (OutTab, 'w') как OutFile: FieldNames = [x.name for x in arcpy.ListFields (InFC)] # преобразовать поля в имена… desc = arcpy.Describe (InFC) if (desc. datasetType == 'FeatureClass'): попробуйте: FieldNames.remove (desc.shapeFieldName) except: arcpy.AddWarning («Невозможно пропустить поле формы, возможно, оно не существует») OutFile.write (','. join (FieldNames )) # запятую отформатируйте имена полей OutFile.write (' n') # новую строку с arcpy.da.SearchCursor (InFC, FieldNames) как Scur: для строки в Scur: OutFile.write (','. join (map (str, row))) # форматирование строки через запятую OutFile.write (' n') # новая строка # Установка параметров среды workspace = r'L:  Simulation  Output  PoolVariables.gdb '# Установка локальных переменных outWorkspace = r 'L:  Simulation  Output  CreateCSV' feature_classes = [] для dirpath, dirnames, file имена в arcpy.da.Walk (workspace, datatype = "FeatureClass", type = "Point"): для имени файла в именах файлов: feature_classes.append (os.path.join (dirpath, filename)) # Прокрутите список классов функций попробуйте: для fc в классах функций: name = os.path.join (outWorkspace, os.path.basename (fc) + ".csv") WriteCsv (fc, name) за исключением: print arcpy.GetMessages ()

Несколько указателей:

  • С использованием'.'. join (карта (строка, строка))исходит из сообщения о переполнении стека (спасибо Mark Biek),картаважно, если строка содержит любой числа (например, FID), чтобы сделать весь список списком строк.
  • Использование ' n' для разделителя строк поддерживается этим сообщением о переполнении стека (спасибо sorin), по-видимому, нет необходимости в os.linesep, поскольку python поймет, что вы пытаетесь сделать, и вставит правильный символ в любом случае ... Я не использую Mac или Linux, поэтому не могу подтвердить.

Я использую что-то подобное с большим успехом.

import arcpy, os, csv inTables = r "pathToWorkspace" для dirpath, dirnames, filenames в arcpy.da.Walk (inTables, datatype = "Table", type = "ALL"): для tableName в именах файлов: print "Добавление таблиц из от "+ tableName +" до "+ newTable arcpy.Append_management (os.path.join (dirpath, tableName), newTable," NO_TEST ") CSVFile = r" pathToOutputCSV.csv "fields = arcpy.ListFields (newTable) fieldNames = [field .name для поля в полях] с open (CSVFile, 'w') как f: dw = csv.DictWriter (f, fieldNames) dw.writeheader () с arcpy.da.SearchCursor (newTable, fieldNames) в качестве курсора: для строки в курсоре: dw.writerow (dict (zip (fieldNames, Utf8EncodeArray (row)))) напечатать "преобразованный" + masterTable + "в файл CSV!" del row, курсор

Смотреть видео: ArcGIS - Geodatabases and Feature Classes - Part 1