Перечислите имена полей слоя в файле MXD

У меня есть файл ArcMap (.MXD), в котором я хочу найти его слои, а затем выбрать слой, и Python покажет мне имена полей таблицы атрибутов этого слоя.

Я дошел до того, что Python (ArcPy) перечисляет мне имена слоев mxd, но я не могу понять, как получить имена полей.

В самой ArcMap я могу легко сделать это следующим образом:

fields = arcpy.ListFields(Layer)
for field in fields:
    print field.name

но как мне сделать это вне ArcMap через файл MXD? Я много искал и ничего не придумал, поэтому с нетерпением жду вашей помощи! Большое спасибо!

2 ответа

Доступ к MXD через arcpy.mapping.MapDocument метод. Затем получите имя и откройте таблицу атрибутов

mxd = arcpy.mapping.MapDocument(r"path/Project.mxd")
for df in arcpy.mapping.ListLayers(mxd):
    print df.name

Ты можешь использовать arcpy и запустить скрипт Python для отображения полей таблицы с помощью ListFileds метод

import arcpy
fieldList = arcpy.ListFields("path/shapefile.shp")    
for field in fieldList:    
    print field.baseName

Хорошо, я нашел хорошее решение. Сначала я получаю все слои из файла MXD, затем сохраняю имя и источник каждого слоя в словаре. Затем я выберу нужный слой из графического интерфейса и проверил его по именам слоев в словаре, через которые я смогу получить доступ к именам полей:

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\MyMap.mxd") # loads my map
df = arcpy.mapping.ListDataFrames(mxd) # checks out the dataframes

layersources = {} # creates an empty dictionary

for d in df:
    layers = arcpy.mapping.ListLayers(mxd, "", d) # lists all available layers

    for lyr in layers:
        layersources[lyr.name] = lyr.dataSource # fills keys and values of the layers (names and sources) into the dictionary

selecteditem = "the wanted layer"  # this I choose from a GUI then, just defined it here as a variable for testing purposes

fields = arcpy.ListFields(layersources[selecteditem]) # creates a list with all the fields from that layer

for field in fields: # iterates through the list of fields
    print field.name # and prints them one by one :-)
Другие вопросы по тегам