Перечислите имена полей слоя в файле 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 :-)