<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How to get symbology and data source with python? in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576008#M45149</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Assuming when you say layer file it means the ".lyr" type, if you have comtypes installed you can use the code below. I simplified it from existing code I had lying around so you'll need to add error-checking at some point.&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://sourceforge.net/projects/comtypes/" rel="nofollow noopener noreferrer" target="_blank"&gt;http://sourceforge.net/projects/comtypes/&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
def openLayerFile(strLayerFile):
&amp;nbsp;&amp;nbsp;&amp;nbsp; objLayerFile = comtypes.client.CreateObject(esriCarto.LayerFile, interface=esriCarto.ILayerFile)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objLayerFile.Open(strLayerFile)
&amp;nbsp;&amp;nbsp;&amp;nbsp; return objLayerFile

def getValueField(objLayer):
&amp;nbsp;&amp;nbsp;&amp;nbsp; objFeatureLayer = objLayer.QueryInterface(esriCarto.IFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objGeoFeatureLayer = objLayer.QueryInterface(esriCarto.IGeoFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objFeatureRenderer = objGeoFeatureLayer.Renderer
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRenderer = objFeatureRenderer.QueryInterface(esriCarto.IUniqueValueRenderer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return objRenderer.Field(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRenderer = objFeatureRenderer.QueryInterface(esriCarto.IClassBreaksRenderer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return objRenderer.Field
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ""

def getDataSource(objLayer):
&amp;nbsp;&amp;nbsp;&amp;nbsp; objFeatureLayer = objLayer.QueryInterface(esriCarto.IFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objDataLayer = objFeatureLayer.QueryInterface(esriCarto.IDataLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objDatasetName = objDataLayer.DataSourceName.QueryInterface(esriGeoDatabase.IDatasetName)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; objWorkspaceName = objDatasetName.WorkspaceName
&amp;nbsp;&amp;nbsp;&amp;nbsp; strDataSource = os.path.join(objWorkspaceName.PathName, objDatasetName.Name)
&amp;nbsp;&amp;nbsp;&amp;nbsp; return strDataSource

import comtypes.client
import os
esriCarto = comtypes.client.GetModule(r'C:\Program Files\ArcGIS\com\esriCarto.olb')
esriGeoDatabase = comtypes.client.GetModule(r'C:\Program Files\ArcGIS\com\esriGeoDatabase.olb')

strLayerFile = r"C:\Temp\test.lyr"
objLayerFile = openLayerFile(strLayerFile)
objLayer = objLayerFile.Layer

print getValueField(objLayer)
print getDataSource(objLayer)

del objLayer
del objLayerFile
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you so much for your help. This works well with my layer files with single layer. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;But I am greedy to know if its possible to read group layer files? It seems that errors occur when opening the group layer files.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 12 Dec 2021 00:48:02 GMT</pubDate>
    <dc:creator>RyanChan</dc:creator>
    <dc:date>2021-12-12T00:48:02Z</dc:date>
    <item>
      <title>How to get symbology and data source with python?</title>
      <link>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576005#M45146</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I am wondering if it is possible for python to return the symbology and the data source information of a existing layer file? I search through gp.describe but there are no properties and methods that return symbology and data source. I simply want the value field of the symbology and the shapefile data source to be printed on the interactive window. Can anyone help?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 06 Feb 2011 22:49:38 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576005#M45146</guid>
      <dc:creator>RyanChan</dc:creator>
      <dc:date>2011-02-06T22:49:38Z</dc:date>
    </item>
    <item>
      <title>Re: How to get symbology and data source with python?</title>
      <link>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576006#M45147</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;In ArcGIS 9.x no. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In ArcGIS 10 you can get the datasource (look up "arcpy.mapping"), but not the symbology .&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;There are workarounds using the win32com.client module to access ArcObject's com interface directly, but that will make your scripts complicated, and probably not worth the effert, since you can do the same thing easier in C# or VB.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 07 Feb 2011 05:18:03 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576006#M45147</guid>
      <dc:creator>NiklasNorrthon</dc:creator>
      <dc:date>2011-02-07T05:18:03Z</dc:date>
    </item>
    <item>
      <title>Re: How to get symbology and data source with python?</title>
      <link>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576007#M45148</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Assuming when you say layer file it means the ".lyr" type, if you have comtypes installed you can use the code below. I simplified it from existing code I had lying around so you'll need to add error-checking at some point.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://sourceforge.net/projects/comtypes/" rel="nofollow noopener noreferrer" target="_blank"&gt;http://sourceforge.net/projects/comtypes/&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
def openLayerFile(strLayerFile):
&amp;nbsp;&amp;nbsp;&amp;nbsp; objLayerFile = comtypes.client.CreateObject(esriCarto.LayerFile, interface=esriCarto.ILayerFile)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objLayerFile.Open(strLayerFile)
&amp;nbsp;&amp;nbsp;&amp;nbsp; return objLayerFile

def getValueField(objLayer):
&amp;nbsp;&amp;nbsp;&amp;nbsp; objFeatureLayer = objLayer.QueryInterface(esriCarto.IFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objGeoFeatureLayer = objLayer.QueryInterface(esriCarto.IGeoFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objFeatureRenderer = objGeoFeatureLayer.Renderer
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRenderer = objFeatureRenderer.QueryInterface(esriCarto.IUniqueValueRenderer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return objRenderer.Field(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRenderer = objFeatureRenderer.QueryInterface(esriCarto.IClassBreaksRenderer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return objRenderer.Field
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ""

def getDataSource(objLayer):
&amp;nbsp;&amp;nbsp;&amp;nbsp; objFeatureLayer = objLayer.QueryInterface(esriCarto.IFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objDataLayer = objFeatureLayer.QueryInterface(esriCarto.IDataLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objDatasetName = objDataLayer.DataSourceName.QueryInterface(esriGeoDatabase.IDatasetName)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; objWorkspaceName = objDatasetName.WorkspaceName
&amp;nbsp;&amp;nbsp;&amp;nbsp; strDataSource = os.path.join(objWorkspaceName.PathName, objDatasetName.Name)
&amp;nbsp;&amp;nbsp;&amp;nbsp; return strDataSource

import comtypes.client
import os
esriCarto = comtypes.client.GetModule(r'C:\Program Files\ArcGIS\com\esriCarto.olb')
esriGeoDatabase = comtypes.client.GetModule(r'C:\Program Files\ArcGIS\com\esriGeoDatabase.olb')

strLayerFile = r"C:\Temp\test.lyr"
objLayerFile = openLayerFile(strLayerFile)
objLayer = objLayerFile.Layer

print getValueField(objLayer)
print getDataSource(objLayer)

del objLayer
del objLayerFile
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 00:47:59 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576007#M45148</guid>
      <dc:creator>BradPosthumus</dc:creator>
      <dc:date>2021-12-12T00:47:59Z</dc:date>
    </item>
    <item>
      <title>Re: How to get symbology and data source with python?</title>
      <link>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576008#M45149</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Assuming when you say layer file it means the ".lyr" type, if you have comtypes installed you can use the code below. I simplified it from existing code I had lying around so you'll need to add error-checking at some point.&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://sourceforge.net/projects/comtypes/" rel="nofollow noopener noreferrer" target="_blank"&gt;http://sourceforge.net/projects/comtypes/&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
def openLayerFile(strLayerFile):
&amp;nbsp;&amp;nbsp;&amp;nbsp; objLayerFile = comtypes.client.CreateObject(esriCarto.LayerFile, interface=esriCarto.ILayerFile)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objLayerFile.Open(strLayerFile)
&amp;nbsp;&amp;nbsp;&amp;nbsp; return objLayerFile

def getValueField(objLayer):
&amp;nbsp;&amp;nbsp;&amp;nbsp; objFeatureLayer = objLayer.QueryInterface(esriCarto.IFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objGeoFeatureLayer = objLayer.QueryInterface(esriCarto.IGeoFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objFeatureRenderer = objGeoFeatureLayer.Renderer
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRenderer = objFeatureRenderer.QueryInterface(esriCarto.IUniqueValueRenderer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return objRenderer.Field(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRenderer = objFeatureRenderer.QueryInterface(esriCarto.IClassBreaksRenderer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return objRenderer.Field
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ""

def getDataSource(objLayer):
&amp;nbsp;&amp;nbsp;&amp;nbsp; objFeatureLayer = objLayer.QueryInterface(esriCarto.IFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objDataLayer = objFeatureLayer.QueryInterface(esriCarto.IDataLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objDatasetName = objDataLayer.DataSourceName.QueryInterface(esriGeoDatabase.IDatasetName)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; objWorkspaceName = objDatasetName.WorkspaceName
&amp;nbsp;&amp;nbsp;&amp;nbsp; strDataSource = os.path.join(objWorkspaceName.PathName, objDatasetName.Name)
&amp;nbsp;&amp;nbsp;&amp;nbsp; return strDataSource

import comtypes.client
import os
esriCarto = comtypes.client.GetModule(r'C:\Program Files\ArcGIS\com\esriCarto.olb')
esriGeoDatabase = comtypes.client.GetModule(r'C:\Program Files\ArcGIS\com\esriGeoDatabase.olb')

strLayerFile = r"C:\Temp\test.lyr"
objLayerFile = openLayerFile(strLayerFile)
objLayer = objLayerFile.Layer

print getValueField(objLayer)
print getDataSource(objLayer)

del objLayer
del objLayerFile
&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you so much for your help. This works well with my layer files with single layer. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;But I am greedy to know if its possible to read group layer files? It seems that errors occur when opening the group layer files.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 00:48:02 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576008#M45149</guid>
      <dc:creator>RyanChan</dc:creator>
      <dc:date>2021-12-12T00:48:02Z</dc:date>
    </item>
    <item>
      <title>Re: How to get symbology and data source with python?</title>
      <link>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576009#M45150</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Good point about the layerfiles containing a group of layers. I've added a function that allows it to also extract all layers if it's a group layer. It's recursive so it should work with nested group layers within a group layer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Note that it's the ICompositeLayer interface, not IGroupLayer, that allows you to extract individual layers from a group layer. IGroupLayer simply accesses the general layer properties of the group.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
def openLayerFile(strLayerFile):
&amp;nbsp;&amp;nbsp;&amp;nbsp; objLayerFile = comtypes.client.CreateObject(esriCarto.LayerFile, interface=esriCarto.ILayerFile)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objLayerFile.Open(strLayerFile)
&amp;nbsp;&amp;nbsp;&amp;nbsp; return objLayerFile

def getLayers(objLayer):
&amp;nbsp;&amp;nbsp;&amp;nbsp; """ Returns a list of layers from a layer file"""
&amp;nbsp;&amp;nbsp;&amp;nbsp; colLayerList = []
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objCompositeLayer = objLayer.QueryInterface(esriCarto.ICompositeLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i in range(objCompositeLayer.Count):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objCurrentLayer&amp;nbsp; = objCompositeLayer.Layer(i)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objNestedCompositeLayer = objCurrentLayer.QueryInterface(esriCarto.ICompositeLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; colLayersInGroup = getLayers(objCurrentLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; colLayerList += colLayersInGroup
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; colLayerList.append(objCurrentLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; colLayerList.append(objLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; return colLayerList
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
def getValueField(objLayer):
&amp;nbsp;&amp;nbsp;&amp;nbsp; objFeatureLayer = objLayer.QueryInterface(esriCarto.IFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objGeoFeatureLayer = objLayer.QueryInterface(esriCarto.IGeoFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objFeatureRenderer = objGeoFeatureLayer.Renderer
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRenderer = objFeatureRenderer.QueryInterface(esriCarto.IUniqueValueRenderer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return objRenderer.Field(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRenderer = objFeatureRenderer.QueryInterface(esriCarto.IClassBreaksRenderer)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return objRenderer.Field
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ""

def getDataSource(objLayer):
&amp;nbsp;&amp;nbsp;&amp;nbsp; objFeatureLayer = objLayer.QueryInterface(esriCarto.IFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objDataLayer = objFeatureLayer.QueryInterface(esriCarto.IDataLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; objDatasetName = objDataLayer.DataSourceName.QueryInterface(esriGeoDatabase.IDatasetName)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; objWorkspaceName = objDatasetName.WorkspaceName
&amp;nbsp;&amp;nbsp;&amp;nbsp; strDataSource = os.path.join(objWorkspaceName.PathName, objDatasetName.Name)
&amp;nbsp;&amp;nbsp;&amp;nbsp; return strDataSource

import comtypes.client
import os
esriCarto = comtypes.client.GetModule(r'C:\Program Files\ArcGIS\com\esriCarto.olb')
esriGeoDatabase = comtypes.client.GetModule(r'C:\Program Files\ArcGIS\com\esriGeoDatabase.olb')

strLayerFile = r"C:\Temp\testGroup.lyr"
objLayerFile = openLayerFile(strLayerFile)
colLayers = getLayers(objLayerFile.Layer)

for objLayer in colLayers:
&amp;nbsp;&amp;nbsp;&amp;nbsp; print objLayer.Name
&amp;nbsp;&amp;nbsp;&amp;nbsp; print getValueField(objLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; print getDataSource(objLayer)

del objLayer
del objLayerFile&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 00:48:04 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576009#M45150</guid>
      <dc:creator>BradPosthumus</dc:creator>
      <dc:date>2021-12-12T00:48:04Z</dc:date>
    </item>
    <item>
      <title>Re: How to get symbology and data source with python?</title>
      <link>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576010#M45151</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Good point about the layerfiles containing a group of layers. I've added a function that allows it to also extract all layers if it's a group layer. It's recursive so it should work with nested group layers within a group layer.&lt;BR /&gt;&lt;BR /&gt;Note that it's the ICompositeLayer interface, not IGroupLayer, that allows you to extract individual layers from a group layer. IGroupLayer simply accesses the general layer properties of the group.&lt;BR /&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you so much for your help Brad. This is so amazing. I really appreciate your help.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 09 Feb 2011 22:18:17 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576010#M45151</guid>
      <dc:creator>RyanChan</dc:creator>
      <dc:date>2011-02-09T22:18:17Z</dc:date>
    </item>
    <item>
      <title>Re: How to get symbology and data source with python?</title>
      <link>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576011#M45152</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Cheers,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Going along with what's been asked and commented on here - In an active Arc Map session - I want to change the symbology of a layer which is repeated multiple times in an mxd. Can I do this?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The basic code I have for getting the layers is below. This is running within ArcMap (not as a .py script)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
myMXD = arcpy.mapping.MapDocument("Current")
lstDataFrames=arcpy.mapping.ListDataFrames(myMXD)
lstLayers=arcpy.mapping.ListLayers(myMXD)

hazardLayer=arcpy.mapping.ListLayers(myMXD,'*Haz*')

allFrames=arcpy.mapping.ListDataFrames(myMXD)

for dataFrame in allFrames:
...&amp;nbsp; myMXD.activeView=dataFrame
...&amp;nbsp; for mapLayer in hazardLayer:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&amp;nbsp; mapLayer.visible=False

&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This just changes the visibility to off...can I change the color for example to some RGB value?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 00:48:07 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/how-to-get-symbology-and-data-source-with-python/m-p/576011#M45152</guid>
      <dc:creator>George_ChandeepCorea</dc:creator>
      <dc:date>2021-12-12T00:48:07Z</dc:date>
    </item>
  </channel>
</rss>

