私はarcpyに関しては初心者ですが、arcpy.da.walkを使用してGISデータのインベントリを作成するスクリプトを開発しようとしています。私たちが持っているデータのフォルダ/ gdbsを調べていくうちに、各フィーチャクラスのCSVにいくつかのアイテムをエクスポートしたいと思います(フィーチャクラスパス、ファイル名、空間参照名、メタデータ目的に満足しています)。私は、メタデータ目的の部分までスクリプトを手に入れました。一度私は行を追加します:arcpy.da.walkを使用してデータをインベントリし、メタデータをcsvにエクスポートします
arcpy.ExportMetadata_conversion(feature_class, translatorpath, xmlfile)
tree = ElementTree()
tree.parse(xmlfile)
spot = tree.find("idinfo/descript/purpose")
私のスクリプトは何も返しません。これらの行がなければ、フィーチャクラスのパス、ファイル名、および空間参照名を含むCSVファイルを受け取っていますが、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
感謝を!私は先週試行錯誤してこのことを理解し、EsriのGeonetフォーラムで助けました。完全な答えはこちらをご覧ください:https://geonet.esri.com/thread/186717-using-arcpydawalk-to-inventory-data-and-export-metadata-to-csv – sgroff