Je suis novice quand il s'agit d'arcpy et j'essaie de développer un script qui utilisera arcpy.da.walk pour inventorier nos données SIG. Comme il traverse les dossiers/gdbs de données que nous avons, je veux exporter quelques éléments à un CSV pour chaque classe d'entités (pour l'instant je serais heureux avec le chemin de la classe d'entités, le nom de fichier, le nom de référence spatiale et le but des métadonnées). J'ai eu le script à travailler jusqu'à la partie de méta-données. Une fois que j'ajoute les lignes:en utilisant arcpy.da.walk pour inventorier les données et exporter les métadonnées vers csv
arcpy.ExportMetadata_conversion(feature_class, translatorpath, xmlfile)
tree = ElementTree()
tree.parse(xmlfile)
spot = tree.find("idinfo/descript/purpose")
mon script ne renvoie rien. Sans ces lignes, je reçois un fichier csv avec le chemin de la classe d'entités, le nom du fichier et le nom de la référence spatiale, mais si j'inclue les lignes, mon fichier csv est vide. Pas d'erreurs, juste vide. Mon script (ci-dessous) est basé sur: https://arcpy.wordpress.com/tag/os-walk/ et https://gis.stackexchange.com/questions/34729/creating-table-containing-all-filenames-and-possibly-metadata-in-file-geodatab/34797#3479/.
Toute aide est grandement appréciée! EDITED: Certaines classes d'entités n'ont peut-être pas de référence spatiale définie et de nombreuses classes d'entités n'ont aucune métadonnée associée. Je les veux toujours dans le fichier csv, mais ces champs peuvent être vides ou indiquer quelque chose comme "Aucune référence spatiale définie" et "Aucun objectif de métadonnées défini".
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
Merci pour l'aide! Je l'ai compris la semaine dernière par essais et erreurs, et j'ai aidé sur le forum Geonet d'Esri. Une réponse complète peut être vu ici: https://geonet.esri.com/thread/186717-using-arcpydawalk-to-inventory-data-and-export-metadata-to-csv – sgroff