【发布时间】:2016-11-30 18:23:11
【问题描述】:
我是 arcpy 的新手,我正在尝试开发一个脚本,该脚本将使用 arcpy.da.walk 来清点我们的 GIS 数据。当它遍历我们拥有的数据文件夹/gdbs 时,我希望它为每个要素类将一些项目导出到 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/。
非常感谢任何帮助!
已编辑:某些要素类可能未定义空间参考,并且许多要素类可能没有任何关联的元数据。我仍然希望这些在 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
【问题讨论】: