Я новичок, когда дело доходит до дуговой работы, и я пытаюсь разработать скрипт, который будет использовать arcpy.da.walk для инвентаризации наших данных ГИС. Поскольку он проходит через папки/gdbs данных, которые у нас есть, я хочу, чтобы он экспортировал несколько элементов в csv для каждого класса объектов (теперь я был бы доволен пути класса объектов, имени файла, имени пространственной ссылки и целей метаданных). Я получил скрипт для работы до части назначения метаданных. Как только я добавлю строки:using arcpy.da.walk для инвентаризации данных и экспорта метаданных в csv
arcpy.ExportMetadata_conversion(feature_class, translatorpath, xmlfile)
tree = ElementTree()
tree.parse(xmlfile)
spot = tree.find("idinfo/descript/purpose")
мой скрипт ничего не возвращает. Без этих строк я получаю файл csv с пулом объектов, именем файла и пространственным именем ссылки, но если я включаю строки, мой файл csv пуст. Нет ошибок, просто пусто. Мой скрипт (включен ниже) основан на: https://arcpy.wordpress.com/tag/os-walk/ и https://gis.stackexchange.com/questions/34729/creating-table-containing-all-filenames-and-possibly-metadata-in-file-geodatab/34797#3479/.
Любая помощь очень ценится!
EDITED: Некоторые классы объектов могут не иметь пространственной привязки, и многие классы объектов могут не иметь связанных метаданных. Я все еще хочу их в csv, но эти поля могут быть пустыми или сказать что-то в строках «Без определения пространственной привязки» и «Без определения метаданных».
import os
import arcpy
import csv
from xml.etree.ElementTree import ElementTree
from arcpy import env
def inventory_data(workspace, datatypes):
for path, path_names, data_names in arcpy.da.Walk(
workspace, datatype=datatypes):
for data_name in data_names:
yield os.path.join(path, data_name)
AGSHOME = arcpy.GetInstallInfo("Desktop")["InstallDir"]
translatorpath = AGSHOME + "Metadata\\Translator\\ARCGIS2FGDC.xml"
outfile = "C:\\GIS\\Records\\Data Management\\Inventories\\GIS_Data_Inventory_daWalk_function_outputtocsv_descitems_try_sr_meta.csv"
xmlfile = "C:\\GIS\\Records\\Data Management\\Inventories\\TempInventoryError\\daWalk_function_outputtocsv_descitems_try_sr_meta.xml"
with open (outfile, 'wb') as csvfile:
csvwriter = csv.writer(csvfile)
for feature_class in inventory_data(r"C:\GIS\Data\Natural_Environment\Species_and_Habitats\Habitat_Models", "FeatureClass"):
try:
desc = arcpy.Describe(feature_class)
sr = desc.spatialReference
arcpy.ExportMetadata_conversion(feature_class, translatorpath, xmlfile)
tree = ElementTree()
tree.parse(xmlfile)
spot = tree.find("idinfo/descript/purpose")
csvwriter.writerow([desc.path.encode('utf-8'), desc.file.encode('utf-8'), desc.dataType.encode('utf-8'), sr.name.encode('utf-8'), spot.text.encode('utf-8')])
except:
pass
Спасибо за помощь! Я понял это на прошлой неделе в ходе проб и ошибок и помог на форуме Geonet в Esri. Полный ответ можно посмотреть здесь: https://geonet.esri.com/thread/186717-using-arcpydawalk-to-inventory-data-and-export-metadata-to-csv – sgroff