<?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 Script to update multiple layers with layer files in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/script-to-update-multiple-layers-with-layer-files/m-p/333808#M26018</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I am looking to modify this script to update multiple layers at the same time with layer files.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[INDENT]import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;df = arcpy.mapping.ListDataFrames(mxd, "County Maps")[0]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;updateLayer = arcpy.mapping.ListLayers(mxd, "Rivers", df)[0]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sourceLayer = arcpy.mapping.Layer(r"C:\Project\Data\Rivers.lyr")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, True)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd.saveACopy(r"C:\Project\Project2.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del mxd, sourceLayer[/INDENT]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For example, I have three layers (roads, rivers, buildings) that I would like updated with my layers files (roads.lyr, rivers.lyr and buildings.lyr).&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here's what I wrote:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[INDENT]import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd = arcpy.mapping.MapDocument("CURRENT")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# loop through layers to get layer names, replace layer file&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;fcList = [roads, rivers, buildings]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for fc in fcList:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fc = arcpy.mapping.ListLayers(mxd, fc,df)[0]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; updateLayer = arcpy.mapping.ListLayers(mxd,fc,df)[0]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="text-decoration:underline;"&gt;sourceLayer = arcpy.mapping.Layer(r"C:\LayerFiles\fc.lyr")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, True)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# refresh view and table of contents, save changes to mxd&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.RefreshActiveView()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.RefreshTOC()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd.save()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del sourceLayer, mxd&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[/INDENT]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It's the underlined line that I am having trouble with.&amp;nbsp; What I want the script to do is look at the input layers in the fcList and update with the appropriate layer file with the same name from my computer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Any help with this would be appreciated.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 03 Jan 2011 13:01:22 GMT</pubDate>
    <dc:creator>AllisonCharenko</dc:creator>
    <dc:date>2011-01-03T13:01:22Z</dc:date>
    <item>
      <title>Script to update multiple layers with layer files</title>
      <link>https://community.esri.com/t5/python-questions/script-to-update-multiple-layers-with-layer-files/m-p/333808#M26018</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I am looking to modify this script to update multiple layers at the same time with layer files.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[INDENT]import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;df = arcpy.mapping.ListDataFrames(mxd, "County Maps")[0]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;updateLayer = arcpy.mapping.ListLayers(mxd, "Rivers", df)[0]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sourceLayer = arcpy.mapping.Layer(r"C:\Project\Data\Rivers.lyr")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, True)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd.saveACopy(r"C:\Project\Project2.mxd")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del mxd, sourceLayer[/INDENT]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For example, I have three layers (roads, rivers, buildings) that I would like updated with my layers files (roads.lyr, rivers.lyr and buildings.lyr).&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here's what I wrote:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[INDENT]import arcpy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd = arcpy.mapping.MapDocument("CURRENT")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# loop through layers to get layer names, replace layer file&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;fcList = [roads, rivers, buildings]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for fc in fcList:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fc = arcpy.mapping.ListLayers(mxd, fc,df)[0]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; updateLayer = arcpy.mapping.ListLayers(mxd,fc,df)[0]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="text-decoration:underline;"&gt;sourceLayer = arcpy.mapping.Layer(r"C:\LayerFiles\fc.lyr")&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, True)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# refresh view and table of contents, save changes to mxd&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.RefreshActiveView()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;arcpy.RefreshTOC()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mxd.save()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;del sourceLayer, mxd&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[/INDENT]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It's the underlined line that I am having trouble with.&amp;nbsp; What I want the script to do is look at the input layers in the fcList and update with the appropriate layer file with the same name from my computer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Any help with this would be appreciated.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 03 Jan 2011 13:01:22 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/script-to-update-multiple-layers-with-layer-files/m-p/333808#M26018</guid>
      <dc:creator>AllisonCharenko</dc:creator>
      <dc:date>2011-01-03T13:01:22Z</dc:date>
    </item>
    <item>
      <title>Re: Script to update multiple layers with layer files</title>
      <link>https://community.esri.com/t5/python-questions/script-to-update-multiple-layers-with-layer-files/m-p/333809#M26019</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Try this. Itereate over a list of lists. Each sublist contains the feature class name and the path to the layer for that feature class. Use the two values with normal list indexing. You can do loops this way that take many inputs that change for each iteration.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
 
# loop through layers to get layer names, replace layer file
fcList = [[roads,r'roads.lyr path'], [rivers,r'rivers.lyr path'], [buildings,r'buildings.lyr path']]
for fc in fcList:
&amp;nbsp;&amp;nbsp;&amp;nbsp; fc = arcpy.mapping.ListLayers(mxd, fc[0],df)[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp; updateLayer = arcpy.mapping.ListLayers(mxd,fc,df)[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp; sourceLayer = arcpy.mapping.Layer(fc[1])
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, True)
 
# refresh view and table of contents, save changes to mxd
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
mxd.save()
del sourceLayer, mxd
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;You could also use a dictionary and .iteritems(). Which ever makes you happy. Neither is better than the other in this case.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
fcDict = {roads:r'roads.lyr path', rivers:r'rivers.lyr path', buildings:r'buildings.lyr path'}
for fc,lyr in fcDict.iteritems():
&amp;nbsp;&amp;nbsp;&amp;nbsp; fc = arcpy.mapping.ListLayers(mxd, fc,df)[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp; updateLayer = arcpy.mapping.ListLayers(mxd,fc,df)[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp; sourceLayer = arcpy.mapping.Layer(lyr)
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer, True)
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 15:48:16 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/script-to-update-multiple-layers-with-layer-files/m-p/333809#M26019</guid>
      <dc:creator>ChrisMathers</dc:creator>
      <dc:date>2021-12-11T15:48:16Z</dc:date>
    </item>
  </channel>
</rss>

