<?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: loop down through a directory tree. in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306813#M23851</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Now I also need to find any grids in the tree, clip them and write them out a output folder that corresponds to the grids' position in the input tree.&amp;nbsp; ListRasters makes a list of grids in the current workspace, not the walked folder,&amp;nbsp; so I had to redefine env.workspace inside a directory loop.&amp;nbsp; So how is my script going to know what folder the grids in my list were found in for formulating the out directory.&amp;nbsp; Another list of the input directories that the script matches up with the grid list based on order number? &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14050187701067815" jivemacro_uid="_14050187701067815" modifiedtitle="true"&gt;
&lt;P&gt;rasterList=[]&lt;/P&gt;
&lt;P&gt;#Find the input feature classes&lt;/P&gt;
&lt;P&gt;for root, dirs, files in os.walk(InputFolder):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for targetdir in dirs:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print root + targetdir&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetworkspace = root + targetdir&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.env.workspace = targetworkspace&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rasterList.append (arcpy.ListRasters("*", "GRID"))&lt;/P&gt;
&lt;P&gt;for raster in rasterList:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print raster&lt;/P&gt;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 10 Jul 2014 19:00:22 GMT</pubDate>
    <dc:creator>PaulHuffman</dc:creator>
    <dc:date>2014-07-10T19:00:22Z</dc:date>
    <item>
      <title>loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306804#M23842</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I want to loop through a folder and clip all feature classes by a AOI poly and write the results to an output folder.&amp;nbsp; How to I also have the loop search all subfolders for vectors and raster feature classes as well?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Jul 2014 16:01:18 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306804#M23842</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-02T16:01:18Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306805#M23843</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;If you have v10.1+, you can use arcpy.da.walk:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://resources.arcgis.com/en/help/main/10.1/index.html#//018w00000023000000"&gt;http://resources.arcgis.com/en/help/main/10.1/index.html#//018w00000023000000&lt;/A&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Jul 2014 16:56:32 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306805#M23843</guid>
      <dc:creator>ChrisSnyder</dc:creator>
      <dc:date>2014-07-02T16:56:32Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306806#M23844</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Or, if you are using an older (&amp;lt;= 10.1) Arc,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;you can use the python os.walk&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;for root, dirs, files in os.walk(basePathVariable):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "%s, " % (root)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(sum(getsize(join(root, name)) for name in files))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print " bytes, %s files\n" % (len(files))&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;prints the number and size of non-directory files in each directory and subdirectory.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Not exactly what you want to do, but you can get where you want to go from there...&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 14:41:23 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306806#M23844</guid>
      <dc:creator>markdenil</dc:creator>
      <dc:date>2021-12-11T14:41:23Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306807#M23845</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;I want to loop through a folder and clip all feature classes by a AOI poly and write the results to an output folder.&amp;nbsp; How to I also have the loop search all subfolders for vectors and raster feature classes as well?&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This will walk all directories you want, including GDB's. You can also add the if to remove directories you're not interested in crawling.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;for dirpath, dirnames, filenames in arcpy.da.Walk(in_workspace, datatype="FeatureClass",type="All"):
&amp;nbsp;&amp;nbsp;&amp;nbsp; if "Remove_Folder" in dirnames:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dirnames.remove('Remove_Folder')
&amp;nbsp;&amp;nbsp;&amp;nbsp; for filename in filenames:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if "{Field Name}" in [f.name for f in arcpy.ListFields(os.path.join(dirpath, filename))]:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Clip_analysis(os.path.join(dirpath, filename), clip_features, out_feature_class, xy_tolerance)&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 14:41:26 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306807#M23845</guid>
      <dc:creator>ChrisBrannin__GISP</dc:creator>
      <dc:date>2021-12-11T14:41:26Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306808#M23846</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;It looks like I need to do it in 10.0 unless I travel there with a &amp;gt; 10.0 laptop installation. And I might have to do that because some of that data is in geodatabases, so os.walk will not find them.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Something else has come up.&amp;nbsp; Many of the input feature classes are way outside the AOI clip.&amp;nbsp; Too much time is being taken up by handling these out of range FCs and the output files are just empty.&amp;nbsp; Is there a way of avoiding the out of range data in the clipping loop? It looks like I could first test for intersection with the clip polygon with &lt;/SPAN&gt;&lt;A href="http://resources.arcgis.com/en/help/main/10.1/index.html#//001700000072000000"&gt;Select layer by Location&lt;/A&gt;&lt;SPAN&gt; but I'm having a hard time telling if that tool is available at 10.0. I don't have 10.0 installed anywhere at my current location, and I was unable to find 10.0 help online.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Jul 2014 19:42:35 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306808#M23846</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-02T19:42:35Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306809#M23847</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Some comments:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1. os.walk does get a you a handle on the directory name that is being parsed, so you could look for if dirName[-4:] == ".gdb" and if found, set the workspace to it, and issue arcpy.listfeatureclasses(). However, if I were you I wouldn't waste time developing code in anything &amp;lt; than v10.1 (since there is so many cool new toys in v10.1 SP1 like .da cursors, and .da.walk).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2. How about just intersecting the extent rectangle of your clip layer vs. the extent rectangles of the FCs that are returned by *.walk? If there is no intersection, don't clip. This extent comparison is easier/faster to do in v10.1 BTW.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Jul 2014 22:27:21 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306809#M23847</guid>
      <dc:creator>ChrisSnyder</dc:creator>
      <dc:date>2014-07-02T22:27:21Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306810#M23848</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I was trying to get this script done yesterday,&amp;nbsp; but puzzled why half of it doesn't work. Because ESRI is doing site maintenance, I couldn'tget back in to ask this question. Client still waiting.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I was trying to get a script to walk down a tree of LIDAR data, find any rasters and feature classes, and clip them to an area of interest.&amp;nbsp; My test data tree just has some tifs in one folder,&amp;nbsp; some shapefiles in another to make things simpler.&amp;nbsp; And I need to make this run in ArcGIS 10.0,&amp;nbsp; so da.walk and da.Cursor are not available. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When my script hit the first tif file,&amp;nbsp; the AOI polygon didn't overlap it at all and I got an error message that it didn't overlap.&amp;nbsp; (Failed to create raster dataset. The reason could be: The clip feature is outside the raster extent. &lt;/P&gt;&lt;P&gt;Failed to execute (Clip).) I was going to put off solving the problem of testing for overlap until I could get the file finding and clipping figured out. So, following an example at &lt;A class="moz-txt-link-freetext" href="http://gis.stackexchange.com/questions/13571/arcpy-compare-extents-of-rasters"&gt;http://gis.stackexchange.com/questions/13571/arcpy-compare-extents-of-rasters&lt;/A&gt;, I added the commented out section, lines 26 to 49,&amp;nbsp; to check for overlap of extent for the tifs.&amp;nbsp; However, the script hits line 48, and says name 'Subset' is not defined.&amp;nbsp; Also none of the print statements in the section are executed,&amp;nbsp; so it looks like none of the extent tests worked.&amp;nbsp; What went wrong? If I just run the script down to the first print statement,&amp;nbsp; all the tifs are found and printed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In the next section, an if statement looks for just shapefiles, and successfully clips them and writes the output to a new output tree. No check for overlap is done for the shapefiles but I probably should to eliminate&amp;nbsp; empty output shapefile and to save execution time. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hey, how do you insert code in this new forum?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#testclip.py&lt;/P&gt;&lt;P&gt;#test trying to walk a directory tree, find rasters and shapefiles, and clip to a area of Interest (AOI)&lt;/P&gt;&lt;P&gt;# and make it run in 10.0 so without da.walk.&lt;/P&gt;&lt;P&gt;# Paul Huffman, Yakama Fisheries, 7/7/2014&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Import arcpy module&lt;/P&gt;&lt;P&gt;import arcpy&lt;/P&gt;&lt;P&gt;import os&lt;/P&gt;&lt;P&gt;arcpy.CheckOutExtension("spatial")&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Set Geoprocessing environments&lt;/P&gt;&lt;P&gt;arcpy.env.scratchWorkspace = "c:\\avdata\\PythonTest\\ClipLidar\\Scratch"&lt;/P&gt;&lt;P&gt;arcpy.env.workspace = "c:\\avdata\\PythonTest\\ClipLidar\TestData"&lt;/P&gt;&lt;P&gt;arcpy.env.overwiteOutput = True&lt;/P&gt;&lt;P&gt;clipshape = "c:\\avdata\\PythonTest\\ClipLidar\\AOIPoly.shp"&lt;/P&gt;&lt;P&gt;InputFolder = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input"&lt;/P&gt;&lt;P&gt;OutputFolder = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Output"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#Find AOI extent&lt;/P&gt;&lt;P&gt;AOI = arcpy.mapping.Layer(clipshape)&lt;/P&gt;&lt;P&gt;AOIextent=AOI.getExtent()&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#Find the input feature classes&lt;/P&gt;&lt;P&gt;for root, dirs, files in os.walk(InputFolder):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for name in files:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.splitext(name)[1] == ".tif":&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print os.path.join(root, name), '\n'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObj = arcpy.mapping.Layer(os.path.join(root, name))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileExtent = FileObj.getExtent()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Processing: " + name&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print FileExtent&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Overlap = str(FileExtent.overlaps(AOIextent))&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Within = str(FileExtent.within(AOIextent))&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Touches = str(FileExtent.touches(AOIextent))&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Crosses = str(FileExtent.crosses(AOIextent))&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Extent_Overlap == 'True':&lt;/P&gt;&lt;P&gt;##&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; Subset = 1&lt;/P&gt;&lt;P&gt;##&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; print "Extent_Overlaps"&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif Extent_Within == 'True':&lt;/P&gt;&lt;P&gt;##&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; Subset = 1&lt;/P&gt;&lt;P&gt;##&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; print "Extent_Within"&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif Extent_Touches == 'True':&lt;/P&gt;&lt;P&gt;##&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; Subset = 1&lt;/P&gt;&lt;P&gt;##&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; print "Extent_Touches"&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif Extent_Crosses == 'True':&lt;/P&gt;&lt;P&gt;##&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; Subset = 1&lt;/P&gt;&lt;P&gt;##&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; print "Extent_Crosses"&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #print(os.path.join(root, name))&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #arcpy.Clip_management(name,clipshape,(os.path.join(OutputFolder,name)))&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Subset == 1:&lt;/P&gt;&lt;P&gt;##&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; arcpy.Clip_management((os.path.join(root, name)),"#",(os.path.join(OutputFolder,name)),clipshape,"#","ClippingGeometry")&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.splitext(name)[1] == ".shp":&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(os.path.join(root, name))&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #arcpy.Clip_management((os.path.join(root, name)),"#",(os.path.join(OutputFolder,name)),clipshape,"#","ClippingGeometry")&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Clip_analysis((os.path.join(root, name)),clipshape,(os.path.join(OutputFolder,name)))&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;End of code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I also found the python glob method.&amp;nbsp; It also can find all the tifs by searching through the tree like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#Find the input feature classes&lt;/P&gt;&lt;P&gt;print (glob.glob("c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\*\\*.tif"),'\n')&lt;/P&gt;&lt;P&gt;##for root, dirs, files in os.walk(InputFolder):&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp; for name in files:&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.splitext(name)[1] == ".tif":&lt;/P&gt;&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print os.path.join(root, name), '\n'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;where the glob statement returns the same list as the next four commented out statements.&amp;nbsp; However, I eventually want to parse out the folders in which the files were found so I can reconstruct the input tree structure in the output tree.&amp;nbsp; Don't know I can do that with the glob returns.&amp;nbsp; Actually I don't know how to to that yet with the walk returns either. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 08 Jul 2014 17:06:25 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306810#M23848</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-08T17:06:25Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306811#M23849</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I got this to work for at least tifs and shapefiles. I'm not sure why I had to use mapping.layer, line 20 and 29, before I could get an Extent of the data.&amp;nbsp; Seems like the overlap tests, lines 32 -&amp;nbsp; 47, could be down more efficiently.&amp;nbsp; Is there just one test that would find if there is no touching or overlap, then skip that file.&amp;nbsp; Where's the docs on that .overlaps stuff?&amp;nbsp; Can't find it today.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Currently all my output lands in one folder. My next step needs to be writing the output to separate folders in the output directory,&amp;nbsp; making the output tree structure look like the input tree.&amp;nbsp; I'm guessing that will involve manipulating the strings of the full paths of the inputs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14048567443985116" jivemacro_uid="_14048567443985116"&gt;
&lt;P&gt;#testclip.py&lt;/P&gt;
&lt;P&gt;#test trying to walk a directory tree, find rasters and shapefiles, and clip to a area of Interest (AOI)&lt;/P&gt;
&lt;P&gt;# and make it run in 10.0 so without da.walk.&lt;/P&gt;
&lt;P&gt;# Paul Huffman, Yakama Fisheries, 7/7/2014&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Import arcpy module&lt;/P&gt;
&lt;P&gt;import arcpy&lt;/P&gt;
&lt;P&gt;import os&lt;/P&gt;
&lt;P&gt;#arcpy.CheckOutExtension("spatial")&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Set Geoprocessing environments&lt;/P&gt;
&lt;P&gt;arcpy.env.scratchWorkspace = "c:\\avdata\\PythonTest\\ClipLidar\\Scratch"&lt;/P&gt;
&lt;P&gt;arcpy.env.workspace = "c:\\avdata\\PythonTest\\ClipLidar\TestData"&lt;/P&gt;
&lt;P&gt;arcpy.env.overwriteOutput = True&lt;/P&gt;
&lt;P&gt;clipshape = "c:\\avdata\\PythonTest\\ClipLidar\\AOIPoly_SP.shp"&lt;/P&gt;
&lt;P&gt;InputFolder = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input"&lt;/P&gt;
&lt;P&gt;OutputFolder = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Output"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Find AOI extent&lt;/P&gt;
&lt;P&gt;AOI = arcpy.mapping.Layer(clipshape)&lt;/P&gt;
&lt;P&gt;AOIextent=AOI.getExtent()&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Find the input feature classes&lt;/P&gt;
&lt;P&gt;for root, dirs, files in os.walk(InputFolder):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for name in files:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Subset = 0&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.splitext(name)[1] == ".tif":&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #print os.path.join(root, name), '\n'&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObj = arcpy.mapping.Layer(os.path.join(root, name))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileExtent = FileObj.getExtent()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Processing: " + name&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Overlap = str(FileExtent.overlaps(AOIextent))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Within = str(FileExtent.within(AOIextent))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Touches = str(FileExtent.touches(AOIextent))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Crosses = str(FileExtent.crosses(AOIextent))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Extent_Overlap == 'True':&lt;/P&gt;
&lt;P&gt;&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; Subset = 1&lt;/P&gt;
&lt;P&gt;&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; print "Extent_Overlaps"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif Extent_Within == 'True':&lt;/P&gt;
&lt;P&gt;&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; Subset = 1&lt;/P&gt;
&lt;P&gt;&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; print "Extent_Within"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif Extent_Touches == 'True':&lt;/P&gt;
&lt;P&gt;&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; Subset = 1&lt;/P&gt;
&lt;P&gt;&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; print "Extent_Touches"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif Extent_Crosses == 'True':&lt;/P&gt;
&lt;P&gt;&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; Subset = 1&lt;/P&gt;
&lt;P&gt;&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; print "Extent_Crosses"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Subset == 1:&lt;/P&gt;
&lt;P&gt;&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; arcpy.Clip_management((os.path.join(root, name)),"#",(os.path.join(OutputFolder,name)),clipshape,"#","ClippingGeometry")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.splitext(name)[1] == ".shp":&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(os.path.join(root, name))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Clip_analysis((os.path.join(root, name)),clipshape,(os.path.join(OutputFolder,name)))&lt;/P&gt;

&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 08 Jul 2014 21:59:41 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306811#M23849</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-08T21:59:41Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306812#M23850</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This is what I have now.&amp;nbsp; Works with tifs and shapefiles, but I need to figure out how to detect and process grids as well.&amp;nbsp; The script looks for files down through the tree below "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input" then writes the data into a copy of the input tree structure below "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Output"&amp;nbsp; To migrate this script to another datas et,&amp;nbsp; the end user has to edit in the new clipshape AOI, the new input path, then also change the name of the top of the input tree "Input" in line 48.&amp;nbsp; This is too tricky. I'd rather have one section at the top where all the editable parameters are found. Maybe I can generalize this by somehow getting the name of that bottom rung folder out of the InputFolder string and stick it in a variable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Lines 27 - 39 are redundantly repeated again redundantly at line 43.&amp;nbsp; Bad style.&amp;nbsp; These lines could define a function, except for the differences in lines 37 and 39.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14049422629469865" jivemacro_uid="_14049422629469865" modifiedtitle="true"&gt;
&lt;P&gt;#testclip.py&lt;/P&gt;
&lt;P&gt;#test trying to walk a directory tree, find rasters and shapefiles, and clip to a area of Interest (AOI)&lt;/P&gt;
&lt;P&gt;# and make it run in 10.0 so without da.walk.&lt;/P&gt;
&lt;P&gt;# Paul Huffman, Yakama Fisheries, 7/7/2014&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Import arcpy module&lt;/P&gt;
&lt;P&gt;import arcpy&lt;/P&gt;
&lt;P&gt;import os&lt;/P&gt;
&lt;P&gt;#arcpy.CheckOutExtension("spatial")&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Set Geoprocessing environments&lt;/P&gt;
&lt;P&gt;arcpy.env.scratchWorkspace = "c:\\avdata\\PythonTest\\ClipLidar\\Scratch"&lt;/P&gt;
&lt;P&gt;arcpy.env.workspace = "c:\\avdata\\PythonTest\\ClipLidar\TestData"&lt;/P&gt;
&lt;P&gt;arcpy.env.overwriteOutput = True&lt;/P&gt;
&lt;P&gt;clipshape = "c:\\avdata\\PythonTest\\ClipLidar\\AOIPoly_SP.shp"&lt;/P&gt;
&lt;P&gt;InputFolder = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input"&lt;/P&gt;
&lt;P&gt;#OutputFolder = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Output"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Find AOI extent&lt;/P&gt;
&lt;P&gt;AOI = arcpy.mapping.Layer(clipshape)&lt;/P&gt;
&lt;P&gt;AOIextent=AOI.getExtent()&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Find the input feature classes&lt;/P&gt;
&lt;P&gt;for root, dirs, files in os.walk(InputFolder):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for name in files:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.splitext(name)[1] == ".tif":&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObj = arcpy.mapping.Layer(os.path.join(root, name))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileExtent = FileObj.getExtent()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Processing: " + name&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if image overlap or touches AOI polygon,&amp;nbsp; then clip image, write to output&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Disjoint = str(FileExtent.disjoint(AOIextent))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Extent_Disjoint == 'False':&lt;/P&gt;
&lt;P&gt;&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; print "Clipping: " + name&lt;/P&gt;
&lt;P&gt;&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; OutputPath = root.replace("Input","Output")&lt;/P&gt;
&lt;P&gt;&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; if not os.path.exists(OutputPath):&lt;/P&gt;
&lt;P&gt;&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; os.makedirs(OutputPath)&lt;/P&gt;
&lt;P&gt;&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; Clipname = os.path.splitext(name)[0] + "cp.tif"&lt;/P&gt;
&lt;P&gt;&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; print "Writing " + (os.path.join(OutputPath,Clipname))&lt;/P&gt;
&lt;P&gt;&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; arcpy.Clip_management((os.path.join(root, name)),"#",(os.path.join(OutputPath,Clipname)),clipshape,"#","ClippingGeometry")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #for shapefiles, use a different clip, write to output. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.splitext(name)[1] == ".shp":&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(os.path.join(root, name))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObj = arcpy.mapping.Layer(os.path.join(root, name))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileExtent = FileObj.getExtent()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Disjoint = str(FileExtent.disjoint(AOIextent))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Extent_Disjoint == 'False':&lt;/P&gt;
&lt;P&gt;&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; print "Clipping: " + name&lt;/P&gt;
&lt;P&gt;&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; OutputPath = root.replace("Input","Output")&lt;/P&gt;
&lt;P&gt;&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; if not os.path.exists(OutputPath):&lt;/P&gt;
&lt;P&gt;&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; os.makedirs(OutputPath)&lt;/P&gt;
&lt;P&gt;&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; Clipname = os.path.splitext(name)[0] + "cp"&lt;/P&gt;
&lt;P&gt;&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; print "Writing " + (os.path.join(OutputPath,Clipname))&lt;/P&gt;
&lt;P&gt;&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; arcpy.Clip_analysis((os.path.join(root, name)),clipshape,(os.path.join(OutputPath,Clipname)))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 09 Jul 2014 21:45:30 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306812#M23850</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-09T21:45:30Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306813#M23851</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Now I also need to find any grids in the tree, clip them and write them out a output folder that corresponds to the grids' position in the input tree.&amp;nbsp; ListRasters makes a list of grids in the current workspace, not the walked folder,&amp;nbsp; so I had to redefine env.workspace inside a directory loop.&amp;nbsp; So how is my script going to know what folder the grids in my list were found in for formulating the out directory.&amp;nbsp; Another list of the input directories that the script matches up with the grid list based on order number? &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14050187701067815" jivemacro_uid="_14050187701067815" modifiedtitle="true"&gt;
&lt;P&gt;rasterList=[]&lt;/P&gt;
&lt;P&gt;#Find the input feature classes&lt;/P&gt;
&lt;P&gt;for root, dirs, files in os.walk(InputFolder):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for targetdir in dirs:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print root + targetdir&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetworkspace = root + targetdir&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.env.workspace = targetworkspace&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rasterList.append (arcpy.ListRasters("*", "GRID"))&lt;/P&gt;
&lt;P&gt;for raster in rasterList:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print raster&lt;/P&gt;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 10 Jul 2014 19:00:22 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306813#M23851</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-10T19:00:22Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306814#M23852</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You could use a list comprehension on line 8 to create a full path to each of the rasters:&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14050294078552389 jive_text_macro" jivemacro_uid="_14050294078552389"&gt;
&lt;P&gt;rasterList.append([os.path.join(arcpy.env.workspace, A) for A in arcpy.ListRasters("*", "GRID")])&lt;/P&gt;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 10 Jul 2014 21:54:01 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306814#M23852</guid>
      <dc:creator>BruceNielsen</dc:creator>
      <dc:date>2014-07-10T21:54:01Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306815#M23853</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;That produces an error "TypeError: 'NoneType' object is not iterable"&amp;nbsp;&amp;nbsp; What does that mean?&amp;nbsp; Is the "*" the 'NoneType'?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 11 Jul 2014 16:13:00 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306815#M23853</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-11T16:13:00Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306816#M23854</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm about ready to tell the client that we're going to run this in ArcGIS 10.2.&amp;nbsp; da.Walk makes this so easy.&amp;nbsp; This script uses da.walk and handles the tifs and grids in the tree, except I hit one grid that had a file name so long I couldn't add any extra letters. &lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_1405095378431240 jive_text_macro" jivemacro_uid="_1405095378431240" modifiedtitle="true"&gt;
&lt;P&gt;#testcliprasterda.py&lt;/P&gt;
&lt;P&gt;#test trying to walk a directory tree, find rasters and shapefiles, and clip to a area of Interest (AOI)&lt;/P&gt;
&lt;P&gt;# using da.walk first available at ArcGIS 10.1&lt;/P&gt;
&lt;P&gt;# Paul Huffman, Yakama Fisheries, 7/7/2014&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Import arcpy module&lt;/P&gt;
&lt;P&gt;import arcpy&lt;/P&gt;
&lt;P&gt;import os&lt;/P&gt;
&lt;P&gt;#arcpy.CheckOutExtension("spatial")&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Set Geoprocessing environments&lt;/P&gt;
&lt;P&gt;arcpy.env.scratchWorkspace = "c:\\avdata\\PythonTest\\ClipLidar\\Scratch"&lt;/P&gt;
&lt;P&gt;#arcpy.env.workspace = "c:\\avdata\\PythonTest\\ClipLidar\TestData"&lt;/P&gt;
&lt;P&gt;arcpy.env.workspace = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit"&lt;/P&gt;
&lt;P&gt;arcpy.env.overwriteOutput = True&lt;/P&gt;
&lt;P&gt;clipshape = "c:\\avdata\\PythonTest\\ClipLidar\\AOIPoly_SP.shp"&lt;/P&gt;
&lt;P&gt;InputFolder = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input"&lt;/P&gt;
&lt;P&gt;#InputFolder = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit"&lt;/P&gt;
&lt;P&gt;#OutputFolder = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Output"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Find AOI extent&lt;/P&gt;
&lt;P&gt;AOI = arcpy.mapping.Layer(clipshape)&lt;/P&gt;
&lt;P&gt;AOIextent=AOI.getExtent()&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#rasterList=[]&lt;/P&gt;
&lt;P&gt;#Find the input feature classes&lt;/P&gt;
&lt;P&gt;#for root, dirs, files in os.walk(InputFolder):&lt;/P&gt;
&lt;P&gt;#walk = arcpy.da.Walk(InputFolder, topdown=True, datatype="RasterDataset")&lt;/P&gt;
&lt;P&gt;for root, dirs, files in arcpy.da.Walk(InputFolder, topdown=True, datatype="RasterDataset"):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for name in files:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObj = arcpy.mapping.Layer(os.path.join(root, name))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileExtent = FileObj.getExtent()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Processing: " + name&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if image overlap or touches AOI polygon,&amp;nbsp; then clip image, write to output&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Disjoint = str(FileExtent.disjoint(AOIextent))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Extent_Disjoint == 'False':&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Clipping: " + name&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OutputPath = root.replace("Input","Output")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not os.path.exists(OutputPath):&lt;/P&gt;
&lt;P&gt;&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; os.makedirs(OutputPath)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Handle tifs&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.splitext(name)[1] == ".tif":&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&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; Clipname = os.path.splitext(name)[0] + "cp.tif"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;
&lt;P&gt;&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; #Clipname = os.path.splitext(name)[0] + "c"&lt;/P&gt;
&lt;P&gt;&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; Clipname = os.path.splitext(name)[0]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Writing " + (os.path.join(OutputPath,Clipname))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Clip_management((os.path.join(root, name)),"#",(os.path.join(OutputPath,Clipname)),clipshape,"#","ClippingGeometry")&lt;/P&gt;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 11 Jul 2014 16:18:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306816#M23854</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-11T16:18:27Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306817#M23855</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;What that probably means is that the list was empty; no GRIDs in the folder. You may need to make it a little smarter:&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14050958756514547" jivemacro_uid="_14050958756514547" modifiedtitle="true"&gt;
&lt;P&gt;rasterInDir = arcpy.ListRasters("*", "GRID")&lt;/P&gt;
&lt;P&gt;if len(rasterInDir) &amp;gt; 0:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rasterList.append([os.path.join(arcpy.env.workspace, A) for A in rasterInDir])&lt;/P&gt;

&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 11 Jul 2014 16:25:08 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306817#M23855</guid>
      <dc:creator>BruceNielsen</dc:creator>
      <dc:date>2014-07-11T16:25:08Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306818#M23856</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm starting to get confused.&amp;nbsp; Using Bruce's last code, now I'm getting subdirectories to my InputFolder added to my rasterList.&amp;nbsp; And I'm missing the last slash in the path name on all of them.&amp;nbsp; Grids are only found in C:\avdata\PythonTest\ClipLidar\TestData\Input\Highest_Hit&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14051006479447137 jive_text_macro" jivemacro_uid="_14051006479447137" modifiedtitle="true"&gt;
&lt;P&gt;&amp;gt;&amp;gt;&amp;gt; ================================ RESTART ================================&lt;/P&gt;
&lt;P&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/P&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\InputHighest_Hit&lt;/P&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\InputOrthophotos&lt;/P&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\Inputvectors&lt;/P&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\Input\Highest_Hitellen_n_hh&lt;/P&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\Input\Highest_Hithillsha_elle1&lt;/P&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\Input\Highest_Hitinfo&lt;/P&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\Input\Highest_Hitmt_clifty_hh&lt;/P&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\Input\Highest_Hitraven_hh&lt;/P&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\Input\Highest_Hittaneum_hh&lt;/P&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\Input\Highest_Hitteanaway_hh&lt;/P&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\Input\Highest_Hity5012010-2000&lt;/P&gt;
&lt;P&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 11 Jul 2014 17:44:39 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306818#M23856</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-11T17:44:39Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306819#M23857</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Less confused now.&amp;nbsp; What I was seeing was the output of the first print statement, unnoticed at first, now commented out, but it showed me that I needed to add '\\" into the string.&amp;nbsp; Now I'm getting a rastList that I can work with:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14051022517626062" jivemacro_uid="_14051022517626062" modifiedtitle="true"&gt;
&lt;P&gt;InputFolder = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input"&lt;/P&gt;
&lt;P&gt;rasterList=[]&lt;/P&gt;
&lt;P&gt;#Find the input feature classes&lt;/P&gt;
&lt;P&gt;for root, dirs, files in os.walk(InputFolder):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for targetdir in dirs:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #print root + "\\" + targetdir&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetworkspace = root + "\\" + targetdir&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.env.workspace = targetworkspace&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #rasterList.append (arcpy.ListRasters("*", "GRID"))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rasterInDir = arcpy.ListRasters("*", "GRID")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if rasterInDir &amp;gt; 0:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rasterList.append([os.path.join(arcpy.env.workspace, A) for A in arcpy.ListRasters("*", "GRID")]) &lt;/P&gt;
&lt;P&gt;for raster in rasterList:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print raster, "\n"&lt;/P&gt;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 11 Jul 2014 18:11:53 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306819#M23857</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-11T18:11:53Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306820#M23858</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm still confused.&amp;nbsp; It looks like my full path rasters are in the list twice, along with some [] elements.&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_1405102953059723" jivemacro_uid="_1405102953059723" modifiedtitle="true"&gt;
&lt;P&gt;&amp;gt;&amp;gt;&amp;gt; for raster in rasterList:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print raster&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;[u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\ellen_n_hh', u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\hillsha_elle1', u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\mt_clifty_hh', u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\raven_hh', u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\taneum_hh', u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\teanaway_hh', u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\y5012010-2000']&lt;/P&gt;
&lt;P&gt;[]&lt;/P&gt;
&lt;P&gt;[]&lt;/P&gt;
&lt;P&gt;[u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\ellen_n_hh\\ellen_n_hh']&lt;/P&gt;
&lt;P&gt;[u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\hillsha_elle1\\hillsha_elle1']&lt;/P&gt;
&lt;P&gt;[]&lt;/P&gt;
&lt;P&gt;[u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\mt_clifty_hh\\mt_clifty_hh']&lt;/P&gt;
&lt;P&gt;[u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\raven_hh\\Band_1']&lt;/P&gt;
&lt;P&gt;[u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\taneum_hh\\taneum_hh']&lt;/P&gt;
&lt;P&gt;[u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\teanaway_hh\\teanaway_hh']&lt;/P&gt;
&lt;P&gt;[u'c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit\\y5012010-2000\\y5012010-2000']&lt;/P&gt;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 11 Jul 2014 18:23:08 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306820#M23858</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-11T18:23:08Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306821#M23859</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I got this version that is working for Grids.&amp;nbsp; But it will bomb if it finds a second folder under the input starting point containing grids.&amp;nbsp; I'm detecting&amp;nbsp; grids with by looping through workspaces and adding grids to the list if the number of grids counted is &amp;gt; 0,&amp;nbsp; lines 28 to 34.&amp;nbsp; But the folder above the Grids is always included in this list,&amp;nbsp; so I delete it out again with line 38.&amp;nbsp; Very crude!&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14053785578256423" jivemacro_uid="_14053785578256423" modifiedtitle="true"&gt;
&lt;P&gt;#testclipgrids.py&lt;/P&gt;
&lt;P&gt;#test trying to walk a directory tree, find grids, and clip to a area of Interest (AOI)&lt;/P&gt;
&lt;P&gt;# and make it run in 10.0 so without da.walk.&lt;/P&gt;
&lt;P&gt;# Paul Huffman, Yakama Fisheries, 7/14/2014&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Import arcpy module&lt;/P&gt;
&lt;P&gt;import arcpy&lt;/P&gt;
&lt;P&gt;import os&lt;/P&gt;
&lt;P&gt;#arcpy.CheckOutExtension("spatial")&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Set Geoprocessing environments&lt;/P&gt;
&lt;P&gt;arcpy.env.scratchWorkspace = "c:\\avdata\\PythonTest\\ClipLidar\\Scratch"&lt;/P&gt;
&lt;P&gt;#arcpy.env.workspace = "c:\\avdata\\PythonTest\\ClipLidar\TestData"&lt;/P&gt;
&lt;P&gt;#arcpy.env.workspace = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input\\Highest_Hit"&lt;/P&gt;
&lt;P&gt;arcpy.env.overwriteOutput = True&lt;/P&gt;
&lt;P&gt;clipshape = "c:\\avdata\\PythonTest\\ClipLidar\\AOIPoly_SP.shp"&lt;/P&gt;
&lt;P&gt;InputFolder = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Find AOI extent&lt;/P&gt;
&lt;P&gt;AOI = arcpy.mapping.Layer(clipshape)&lt;/P&gt;
&lt;P&gt;AOIextent=AOI.getExtent()&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Intialize empty lists&lt;/P&gt;
&lt;P&gt;rasterList=[]&lt;/P&gt;
&lt;P&gt;rasterList1=[]&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Find the input feature classes&lt;/P&gt;
&lt;P&gt;for root, dirs, files in os.walk(InputFolder):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for targetdir in dirs:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetworkspace = root + "\\" + targetdir&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.env.workspace = targetworkspace&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rasterInDir = arcpy.ListRasters("*", "GRID")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(rasterInDir) &amp;gt; 0:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rasterList.append(arcpy.env.workspace)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;for raster in rasterList:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print raster&lt;/P&gt;
&lt;P&gt;del rasterList[0]&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#start comparing extents and clipping&lt;/P&gt;
&lt;P&gt;for name in rasterList:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObj = arcpy.mapping.Layer(name)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileExtent = FileObj.getExtent()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Processing: " + name&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; #if image overlap or touches AOI polygon,&amp;nbsp; then clip image, write to output&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Disjoint = str(FileExtent.disjoint(AOIextent))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Extent_Disjoint == 'False':&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Clipping: " + name&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foldername = os.path.dirname(name)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OutputPath = foldername.replace("Input","Output")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #print "name = " +name&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #print "OutputPath =" + OutputPath&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not os.path.exists(OutputPath):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.makedirs(OutputPath)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Clipname = os.path.splitext(name)[0]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Clipbasename = os.path.basename(Clipname)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #print "Clipname = " + Clipname&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Writing " + (os.path.join(OutputPath,Clipbasename))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Clip_management(name,"#",(os.path.join(OutputPath,Clipbasename)),clipshape,"#","ClippingGeometry")&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Jul 2014 22:56:19 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306821#M23859</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-14T22:56:19Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306822#M23860</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;There is still something wrong with the way arcpy.ListRasters works to detect grids.&amp;nbsp; Maybe not wrong, but unexpected.&amp;nbsp; Line 12's output shows that ListRasters still finds my grids in their parent workspace and also the subdirectory for the grid that contains the info external files.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The code segment:&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14060557060222057 jive_text_macro" jivemacro_uid="_14060557060222057" modifiedtitle="true"&gt;
&lt;P&gt;#Find the input&amp;nbsp; Grid feature classes&lt;/P&gt;
&lt;P&gt;for root, dirs, files in os.walk(InputFolder):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for targetdir in dirs:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetworkspace = root + "\\" + targetdir&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.env.workspace = targetworkspace&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rasterInDir = arcpy.ListRasters("*", "GRID")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(rasterInDir) &amp;gt; 0:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for raster in rasterInDir:&lt;/P&gt;
&lt;P&gt;&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; rasterList.append(targetworkspace + "\\" + raster)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;for raster in rasterList:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print raster&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The output of the print statement, in part:&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14060558046396043" jivemacro_uid="_14060558046396043" modifiedtitle="true"&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\Input\BareEarth\hillsha_tane1&lt;/P&gt;
&lt;P&gt;..&lt;/P&gt;
&lt;P&gt;..&lt;/P&gt;
&lt;P&gt;c:\avdata\PythonTest\ClipLidar\TestData\Input\BareEarth\hillsha_tane1\hillsha_tane1&lt;/P&gt;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Jul 2014 19:04:43 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306822#M23860</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-22T19:04:43Z</dc:date>
    </item>
    <item>
      <title>Re: loop down through a directory tree.</title>
      <link>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306823#M23861</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Fixed it.&amp;nbsp; This is what satisfied the colleague, and was put into production. Lines 30-34 is how I check to see if the current worksheet is a Grid or a workspace containing grids.&amp;nbsp; Had to go through this extra BS because I couldn't use da.walk.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="python" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14068254025555503" jivemacro_uid="_14068254025555503" modifiedtitle="true"&gt;
&lt;P&gt;#testclipgridstifsshapes.py&lt;/P&gt;
&lt;P&gt;#test trying to walk a directory tree, find grids, and clip to a area of Interest (AOI)&lt;/P&gt;
&lt;P&gt;# and make it run in 10.0 so without da.walk.&lt;/P&gt;
&lt;P&gt;# Paul Huffman, Yakama Fisheries, 7/21/2014&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Import arcpy module&lt;/P&gt;
&lt;P&gt;import arcpy&lt;/P&gt;
&lt;P&gt;import os&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;# Set Geoprocessing environments&lt;/P&gt;
&lt;P&gt;#arcpy.env.scratchWorkspace = "c:\\avdata\\PythonTest\\ClipLidar\\Scratch"&lt;/P&gt;
&lt;P&gt;arcpy.env.overwriteOutput = True&lt;/P&gt;
&lt;P&gt;clipshape = "c:\\avdata\\PythonTest\\ClipLidar\\AOIPoly_SP.shp"&lt;/P&gt;
&lt;P&gt;InputFolder = "c:\\avdata\\PythonTest\\ClipLidar\\TestData\\Input"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#find input folder bottom folder&lt;/P&gt;
&lt;P&gt;InputString = InputFolder.split("\\")[-1]&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Find AOI extent&lt;/P&gt;
&lt;P&gt;AOI = arcpy.mapping.Layer(clipshape)&lt;/P&gt;
&lt;P&gt;AOIextent=AOI.getExtent()&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Intialize empty lists&lt;/P&gt;
&lt;P&gt;rasterList=[]&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Find the input&amp;nbsp; Grid feature classes&lt;/P&gt;
&lt;P&gt;for root, dirs, files in os.walk(InputFolder):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for targetdir in dirs:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetworkspace = root + "\\" + targetdir&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if the targetworkspace can be initialized as a Raster object, do nothing else&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try: &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Raster(targetworkspace)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if the targetworkspace fails when an attempt is made to initialize it as a raster object, search for rasters within it&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.env.workspace = targetworkspace&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rasterInDir = arcpy.ListRasters("*", "GRID")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(rasterInDir) &amp;gt; 0:&lt;/P&gt;
&lt;P&gt;&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; for raster in rasterInDir:&lt;/P&gt;
&lt;P&gt;&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; rasterList.append(targetworkspace + "\\" + raster)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;##for raster in rasterList:&lt;/P&gt;
&lt;P&gt;##&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print raster&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#start comparing extents and clipping&lt;/P&gt;
&lt;P&gt;for name in rasterList:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObj = arcpy.mapping.Layer(name)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileExtent = FileObj.getExtent()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #print "Processing: " + name&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; #if image overlap or touches AOI polygon,&amp;nbsp; then clip image, write to output&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Disjoint = str(FileExtent.disjoint(AOIextent))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Extent_Disjoint == 'False':&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Clipping: " + name&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foldername = os.path.dirname(name)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OutputPath = foldername.replace(InputString,"Output")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not os.path.exists(OutputPath):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.makedirs(OutputPath)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(os.path.basename(name)) &amp;gt; 10:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Shortname = (os.path.basename(name))[0:11]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Grid name shortened to " + Shortname&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Clipname = os.path.splitext(Shortname)[0] + "cp"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Clipname = os.path.splitext(name)[0] + "cp"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Clipbasename = os.path.basename(Clipname)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Writing " + (os.path.join(OutputPath,Clipbasename))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.Clip_management(name,"#",(os.path.join(OutputPath,Clipbasename)),clipshape,"#","ClippingGeometry")&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#Find the input tifs and shapefiles&lt;/P&gt;
&lt;P&gt;for root, dirs, files in os.walk(InputFolder):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for name in files:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.splitext(name)[1] == ".tif":&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObj = arcpy.mapping.Layer(os.path.join(root, name))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileExtent = FileObj.getExtent()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #print "Processing: " + name&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if image overlap or touches AOI polygon,&amp;nbsp; then clip image, write to output&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Disjoint = str(FileExtent.disjoint(AOIextent))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Extent_Disjoint == 'False':&lt;/P&gt;
&lt;P&gt;&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; print "Clipping: " + name&lt;/P&gt;
&lt;P&gt;&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; OutputPath = root.replace(InputString,"Output")&lt;/P&gt;
&lt;P&gt;&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; if not os.path.exists(OutputPath):&lt;/P&gt;
&lt;P&gt;&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; os.makedirs(OutputPath)&lt;/P&gt;
&lt;P&gt;&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; Clipname = os.path.splitext(name)[0] + "cp.tif"&lt;/P&gt;
&lt;P&gt;&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; print "Writing " + (os.path.join(OutputPath,Clipname))&lt;/P&gt;
&lt;P&gt;&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; arcpy.Clip_management((os.path.join(root, name)),"#",(os.path.join(OutputPath,Clipname)),clipshape,"#","ClippingGeometry")&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #for shapefiles, use a different clip, write to output. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.splitext(name)[1] == ".shp":&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print(os.path.join(root, name))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileObj = arcpy.mapping.Layer(os.path.join(root, name))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileExtent = FileObj.getExtent()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extent_Disjoint = str(FileExtent.disjoint(AOIextent))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Extent_Disjoint == 'False':&lt;/P&gt;
&lt;P&gt;&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; print "Clipping: " + name&lt;/P&gt;
&lt;P&gt;&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; OutputPath = root.replace(InputString,"Output")&lt;/P&gt;
&lt;P&gt;&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; if not os.path.exists(OutputPath):&lt;/P&gt;
&lt;P&gt;&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; os.makedirs(OutputPath)&lt;/P&gt;
&lt;P&gt;&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; Clipname = os.path.splitext(name)[0] + "cp"&lt;/P&gt;
&lt;P&gt;&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; print "Writing " + (os.path.join(OutputPath,Clipname))&lt;/P&gt;
&lt;P&gt;&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; arcpy.Clip_analysis((os.path.join(root, name)),clipshape,(os.path.join(OutputPath,Clipname)))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 31 Jul 2014 16:52:08 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/loop-down-through-a-directory-tree/m-p/306823#M23861</guid>
      <dc:creator>PaulHuffman</dc:creator>
      <dc:date>2014-07-31T16:52:08Z</dc:date>
    </item>
  </channel>
</rss>

