<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>os.path – Platform-independent manipulation of file names. — Python Module of the Week</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', VERSION: '1.132', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="author" title="About these documents" href="../about.html" /> <link rel="top" title="Python Module of the Week" href="../index.html" /> <link rel="up" title="File and Directory Access" href="../file_access.html" /> <link rel="next" title="fileinput – Process lines from input streams" href="../fileinput/index.html" /> <link rel="prev" title="File and Directory Access" href="../file_access.html" /> </head> <body> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > <a href="../py-modindex.html" title="Python Module Index" >modules</a> |</li> <li class="right" > <a href="../fileinput/index.html" title="fileinput – Process lines from input streams" accesskey="N">next</a> |</li> <li class="right" > <a href="../file_access.html" title="File and Directory Access" accesskey="P">previous</a> |</li> <li><a href="../contents.html">PyMOTW</a> »</li> <li><a href="../file_access.html" accesskey="U">File and Directory Access</a> »</li> </ul> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h3><a href="../contents.html">Table Of Contents</a></h3> <ul> <li><a class="reference internal" href="#">os.path – Platform-independent manipulation of file names.</a><ul> <li><a class="reference internal" href="#parsing-paths">Parsing Paths</a></li> <li><a class="reference internal" href="#building-paths">Building Paths</a></li> <li><a class="reference internal" href="#normalizing-paths">Normalizing Paths</a></li> <li><a class="reference internal" href="#file-times">File Times</a></li> <li><a class="reference internal" href="#testing-files">Testing Files</a></li> <li><a class="reference internal" href="#traversing-a-directory-tree">Traversing a Directory Tree</a></li> </ul> </li> </ul> <h4>Previous topic</h4> <p class="topless"><a href="../file_access.html" title="previous chapter">File and Directory Access</a></p> <h4>Next topic</h4> <p class="topless"><a href="../fileinput/index.html" title="next chapter">fileinput – Process lines from input streams</a></p> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="../_sources/ospath/index.txt" rel="nofollow">Show Source</a></li> </ul> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="../search.html" method="get"> <input type="text" name="q" size="18" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="module-os.path"> <span id="os-path-platform-independent-manipulation-of-file-names"></span><h1>os.path – Platform-independent manipulation of file names.<a class="headerlink" href="#module-os.path" title="Permalink to this headline">¶</a></h1> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field"><th class="field-name">Purpose:</th><td class="field-body">Parse, build, test, and otherwise work on file names and paths.</td> </tr> <tr class="field"><th class="field-name">Python Version:</th><td class="field-body">1.4 and later</td> </tr> </tbody> </table> <p>Writing code to work with files on multiple platforms is easy using the functions included in the <a class="reference internal" href="#module-os.path" title="os.path: Platform-independent manipulation of file names."><tt class="xref py py-mod docutils literal"><span class="pre">os.path</span></tt></a> module. Even programs not intended to be ported between platforms should use <a class="reference internal" href="#module-os.path" title="os.path: Platform-independent manipulation of file names."><tt class="xref py py-mod docutils literal"><span class="pre">os.path</span></tt></a> for reliable filename parsing.</p> <div class="section" id="parsing-paths"> <h2>Parsing Paths<a class="headerlink" href="#parsing-paths" title="Permalink to this headline">¶</a></h2> <p>The first set of functions in os.path can be used to parse strings representing filenames into their component parts. It is important to realize that these functions do not depend on the paths actually existing; they operate solely on the strings.</p> <p>Path parsing depends on a few variable defined in <a class="reference internal" href="../os/index.html#module-os" title="os: Portable access to operating system specific features."><tt class="xref py py-mod docutils literal"><span class="pre">os</span></tt></a>:</p> <ul class="simple"> <li><tt class="docutils literal"><span class="pre">os.sep</span></tt> - The separator between portions of the path (e.g., “<tt class="docutils literal"><span class="pre">/</span></tt>” or “<tt class="docutils literal"><span class="pre">\</span></tt>”).</li> <li><tt class="docutils literal"><span class="pre">os.extsep</span></tt> - The separator between a filename and the file “extension” (e.g., “<tt class="docutils literal"><span class="pre">.</span></tt>”).</li> <li><tt class="docutils literal"><span class="pre">os.pardir</span></tt> - The path component that means traverse the directory tree up one level (e.g., “<tt class="docutils literal"><span class="pre">..</span></tt>”).</li> <li><tt class="docutils literal"><span class="pre">os.curdir</span></tt> - The path component that refers to the current directory (e.g., “<tt class="docutils literal"><span class="pre">.</span></tt>”).</li> </ul> <p><tt class="docutils literal"><span class="pre">split()</span></tt> breaks the path into 2 separate parts and returns the tuple. The second element is the last component of the path, and the first element is everything that comes before it.</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os.path</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="p">[</span> <span class="s">'/one/two/three'</span><span class="p">,</span> <span class="s">'/one/two/three/'</span><span class="p">,</span> <span class="s">'/'</span><span class="p">,</span> <span class="s">'.'</span><span class="p">,</span> <span class="s">''</span><span class="p">]:</span> <span class="k">print</span> <span class="s">'"</span><span class="si">%s</span><span class="s">" : "</span><span class="si">%s</span><span class="s">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">path</span><span class="p">))</span> </pre></div> </div> <div class="highlight-python"><pre>$ python ospath_split.py "/one/two/three" : "('/one/two', 'three')" "/one/two/three/" : "('/one/two/three', '')" "/" : "('/', '')" "." : "('', '.')" "" : "('', '')"</pre> </div> <p><tt class="docutils literal"><span class="pre">basename()</span></tt> returns a value equivalent to the second part of the <tt class="docutils literal"><span class="pre">split()</span></tt> value.</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os.path</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="p">[</span> <span class="s">'/one/two/three'</span><span class="p">,</span> <span class="s">'/one/two/three/'</span><span class="p">,</span> <span class="s">'/'</span><span class="p">,</span> <span class="s">'.'</span><span class="p">,</span> <span class="s">''</span><span class="p">]:</span> <span class="k">print</span> <span class="s">'"</span><span class="si">%s</span><span class="s">" : "</span><span class="si">%s</span><span class="s">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">path</span><span class="p">))</span> </pre></div> </div> <div class="highlight-python"><pre>$ python ospath_basename.py "/one/two/three" : "three" "/one/two/three/" : "" "/" : "" "." : "." "" : ""</pre> </div> <p><tt class="docutils literal"><span class="pre">dirname()</span></tt> returns the first part of the split path:</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os.path</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="p">[</span> <span class="s">'/one/two/three'</span><span class="p">,</span> <span class="s">'/one/two/three/'</span><span class="p">,</span> <span class="s">'/'</span><span class="p">,</span> <span class="s">'.'</span><span class="p">,</span> <span class="s">''</span><span class="p">]:</span> <span class="k">print</span> <span class="s">'"</span><span class="si">%s</span><span class="s">" : "</span><span class="si">%s</span><span class="s">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">path</span><span class="p">))</span> </pre></div> </div> <div class="highlight-python"><pre>$ python ospath_dirname.py "/one/two/three" : "/one/two" "/one/two/three/" : "/one/two/three" "/" : "/" "." : "" "" : ""</pre> </div> <p><tt class="docutils literal"><span class="pre">splitext()</span></tt> works like <tt class="docutils literal"><span class="pre">split()</span></tt> but divides the path on the extension separator, rather than the directory separator.</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os.path</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="p">[</span> <span class="s">'filename.txt'</span><span class="p">,</span> <span class="s">'filename'</span><span class="p">,</span> <span class="s">'/path/to/filename.txt'</span><span class="p">,</span> <span class="s">'/'</span><span class="p">,</span> <span class="s">''</span> <span class="p">]:</span> <span class="k">print</span> <span class="s">'"</span><span class="si">%s</span><span class="s">" :'</span> <span class="o">%</span> <span class="n">path</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> </pre></div> </div> <div class="highlight-python"><pre>$ python ospath_splitext.py "filename.txt" : ('filename', '.txt') "filename" : ('filename', '') "/path/to/filename.txt" : ('/path/to/filename', '.txt') "/" : ('/', '') "" : ('', '')</pre> </div> <p><tt class="docutils literal"><span class="pre">commonprefix()</span></tt> takes a list of paths as an argument and returns a single string that represents a common prefix present in all of the paths. The value may represent a path that does not actually exist, and the path separator is not included in the consideration, so the prefix might not stop on a separator boundary.</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os.path</span> <span class="n">paths</span> <span class="o">=</span> <span class="p">[</span><span class="s">'/one/two/three/four'</span><span class="p">,</span> <span class="s">'/one/two/threefold'</span><span class="p">,</span> <span class="s">'/one/two/three/'</span><span class="p">,</span> <span class="p">]</span> <span class="k">print</span> <span class="n">paths</span> <span class="k">print</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">commonprefix</span><span class="p">(</span><span class="n">paths</span><span class="p">)</span> </pre></div> </div> <p>In this example the common prefix string is <tt class="docutils literal"><span class="pre">/one/two/three</span></tt>, even though one path does not include a directory named <tt class="docutils literal"><span class="pre">three</span></tt>.</p> <div class="highlight-python"><pre>$ python ospath_commonprefix.py ['/one/two/three/four', '/one/two/threefold', '/one/two/three/'] /one/two/three</pre> </div> </div> <div class="section" id="building-paths"> <h2>Building Paths<a class="headerlink" href="#building-paths" title="Permalink to this headline">¶</a></h2> <p>Besides taking existing paths apart, you will frequently need to build paths from other strings.</p> <p>To combine several path components into a single value, use <tt class="docutils literal"><span class="pre">join()</span></tt>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os.path</span> <span class="k">for</span> <span class="n">parts</span> <span class="ow">in</span> <span class="p">[</span> <span class="p">(</span><span class="s">'one'</span><span class="p">,</span> <span class="s">'two'</span><span class="p">,</span> <span class="s">'three'</span><span class="p">),</span> <span class="p">(</span><span class="s">'/'</span><span class="p">,</span> <span class="s">'one'</span><span class="p">,</span> <span class="s">'two'</span><span class="p">,</span> <span class="s">'three'</span><span class="p">),</span> <span class="p">(</span><span class="s">'/one'</span><span class="p">,</span> <span class="s">'/two'</span><span class="p">,</span> <span class="s">'/three'</span><span class="p">),</span> <span class="p">]:</span> <span class="k">print</span> <span class="n">parts</span><span class="p">,</span> <span class="s">':'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="o">*</span><span class="n">parts</span><span class="p">)</span> </pre></div> </div> <div class="highlight-python"><pre>$ python ospath_join.py ('one', 'two', 'three') : one/two/three ('/', 'one', 'two', 'three') : /one/two/three ('/one', '/two', '/three') : /three</pre> </div> <p>It’s also easy to work with paths that include “variable” components that can be expanded automatically. For example, <tt class="docutils literal"><span class="pre">expanduser()</span></tt> converts the tilde (<tt class="docutils literal"><span class="pre">~</span></tt>) character to a user’s home directory.</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os.path</span> <span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="p">[</span> <span class="s">''</span><span class="p">,</span> <span class="s">'dhellmann'</span><span class="p">,</span> <span class="s">'postgres'</span> <span class="p">]:</span> <span class="n">lookup</span> <span class="o">=</span> <span class="s">'~'</span> <span class="o">+</span> <span class="n">user</span> <span class="k">print</span> <span class="n">lookup</span><span class="p">,</span> <span class="s">':'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="n">lookup</span><span class="p">)</span> </pre></div> </div> <div class="highlight-python"><pre>$ python ospath_expanduser.py ~ : /Users/dhellmann ~dhellmann : /Users/dhellmann ~postgres : ~postgres</pre> </div> <p><tt class="docutils literal"><span class="pre">expandvars()</span></tt> is more general, and expands any shell environment variables present in the path.</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os.path</span> <span class="kn">import</span> <span class="nn">os</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s">'MYVAR'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'VALUE'</span> <span class="k">print</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="s">'/path/to/$MYVAR'</span><span class="p">)</span> </pre></div> </div> <div class="highlight-python"><pre>$ python ospath_expandvars.py /path/to/VALUE</pre> </div> </div> <div class="section" id="normalizing-paths"> <h2>Normalizing Paths<a class="headerlink" href="#normalizing-paths" title="Permalink to this headline">¶</a></h2> <p>Paths assembled from separate strings using <tt class="docutils literal"><span class="pre">join()</span></tt> or with embedded variables might end up with extra separators or relative path components. Use <tt class="docutils literal"><span class="pre">normpath()</span></tt> to clean them up:</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os.path</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="p">[</span> <span class="s">'one//two//three'</span><span class="p">,</span> <span class="s">'one/./two/./three'</span><span class="p">,</span> <span class="s">'one/../one/two/three'</span><span class="p">,</span> <span class="p">]:</span> <span class="k">print</span> <span class="n">path</span><span class="p">,</span> <span class="s">':'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">normpath</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> </pre></div> </div> <div class="highlight-python"><pre>$ python ospath_normpath.py one//two//three : one/two/three one/./two/./three : one/two/three one/../one/two/three : one/two/three</pre> </div> <p>To convert a relative path to a complete absolute filename, use <tt class="docutils literal"><span class="pre">abspath()</span></tt>.</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os.path</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="p">[</span> <span class="s">'.'</span><span class="p">,</span> <span class="s">'..'</span><span class="p">,</span> <span class="s">'./one/two/three'</span><span class="p">,</span> <span class="s">'../one/two/three'</span><span class="p">]:</span> <span class="k">print</span> <span class="s">'"</span><span class="si">%s</span><span class="s">" : "</span><span class="si">%s</span><span class="s">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">path</span><span class="p">))</span> </pre></div> </div> <div class="highlight-python"><pre>$ python ospath_abspath.py "." : "/Users/dhellmann/Documents/PyMOTW/src/PyMOTW/ospath" ".." : "/Users/dhellmann/Documents/PyMOTW/src/PyMOTW" "./one/two/three" : "/Users/dhellmann/Documents/PyMOTW/src/PyMOTW/ospath/one/two/three" "../one/two/three" : "/Users/dhellmann/Documents/PyMOTW/src/PyMOTW/one/two/three"</pre> </div> </div> <div class="section" id="file-times"> <h2>File Times<a class="headerlink" href="#file-times" title="Permalink to this headline">¶</a></h2> <p>Besides working with paths, os.path also includes some functions for retrieving file properties, which can be more convenient than calling <tt class="docutils literal"><span class="pre">os.stat()</span></tt>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os.path</span> <span class="kn">import</span> <span class="nn">time</span> <span class="k">print</span> <span class="s">'File :'</span><span class="p">,</span> <span class="n">__file__</span> <span class="k">print</span> <span class="s">'Access time :'</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">ctime</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getatime</span><span class="p">(</span><span class="n">__file__</span><span class="p">))</span> <span class="k">print</span> <span class="s">'Modified time:'</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">ctime</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getmtime</span><span class="p">(</span><span class="n">__file__</span><span class="p">))</span> <span class="k">print</span> <span class="s">'Change time :'</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">ctime</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getctime</span><span class="p">(</span><span class="n">__file__</span><span class="p">))</span> <span class="k">print</span> <span class="s">'Size :'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">getsize</span><span class="p">(</span><span class="n">__file__</span><span class="p">)</span> </pre></div> </div> <div class="highlight-python"><pre>$ python ospath_properties.py File : ospath_properties.py Access time : Sun Oct 24 08:54:20 2010 Modified time: Sun Oct 10 09:12:21 2010 Change time : Thu Oct 21 06:02:31 2010 Size : 495</pre> </div> </div> <div class="section" id="testing-files"> <h2>Testing Files<a class="headerlink" href="#testing-files" title="Permalink to this headline">¶</a></h2> <p>When your program encounters a path name, it often needs to know whether the path refers to a file or directory. If you are working on a platform that supports it, you may need to know if the path refers to a symbolic link or mount point. You will also want to test whether the path exists or not. <a class="reference internal" href="#module-os.path" title="os.path: Platform-independent manipulation of file names."><tt class="xref py py-mod docutils literal"><span class="pre">os.path</span></tt></a> provides functions to test all of these conditions.</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os.path</span> <span class="k">for</span> <span class="nb">file</span> <span class="ow">in</span> <span class="p">[</span> <span class="n">__file__</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">'/'</span><span class="p">,</span> <span class="s">'./broken_link'</span><span class="p">]:</span> <span class="k">print</span> <span class="s">'File :'</span><span class="p">,</span> <span class="nb">file</span> <span class="k">print</span> <span class="s">'Absolute :'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isabs</span><span class="p">(</span><span class="nb">file</span><span class="p">)</span> <span class="k">print</span> <span class="s">'Is File? :'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="nb">file</span><span class="p">)</span> <span class="k">print</span> <span class="s">'Is Dir? :'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="nb">file</span><span class="p">)</span> <span class="k">print</span> <span class="s">'Is Link? :'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">islink</span><span class="p">(</span><span class="nb">file</span><span class="p">)</span> <span class="k">print</span> <span class="s">'Mountpoint? :'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">ismount</span><span class="p">(</span><span class="nb">file</span><span class="p">)</span> <span class="k">print</span> <span class="s">'Exists? :'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="nb">file</span><span class="p">)</span> <span class="k">print</span> <span class="s">'Link Exists?:'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">lexists</span><span class="p">(</span><span class="nb">file</span><span class="p">)</span> <span class="k">print</span> </pre></div> </div> <div class="highlight-python"><pre>$ ln -s /does/not/exist broken_link $ python ospath_tests.py File : ospath_tests.py Absolute : False Is File? : True Is Dir? : False Is Link? : False Mountpoint? : False Exists? : True Link Exists?: True File : Absolute : False Is File? : False Is Dir? : False Is Link? : False Mountpoint? : False Exists? : False Link Exists?: False File : / Absolute : True Is File? : False Is Dir? : True Is Link? : False Mountpoint? : True Exists? : True Link Exists?: True File : ./broken_link Absolute : False Is File? : False Is Dir? : False Is Link? : True Mountpoint? : False Exists? : False Link Exists?: True</pre> </div> </div> <div class="section" id="traversing-a-directory-tree"> <h2>Traversing a Directory Tree<a class="headerlink" href="#traversing-a-directory-tree" title="Permalink to this headline">¶</a></h2> <p><tt class="docutils literal"><span class="pre">os.path.walk()</span></tt> traverses all of the directories in a tree and calls a function you provide passing the directory name and the names of the contents of that directory. This example produces a recursive directory listing, ignoring <tt class="docutils literal"><span class="pre">.svn</span></tt> directories.</p> <div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">os.path</span> <span class="kn">import</span> <span class="nn">pprint</span> <span class="k">def</span> <span class="nf">visit</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">dirname</span><span class="p">,</span> <span class="n">names</span><span class="p">):</span> <span class="k">print</span> <span class="n">dirname</span><span class="p">,</span> <span class="n">arg</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span> <span class="n">subname</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirname</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">subname</span><span class="p">):</span> <span class="k">print</span> <span class="s">' </span><span class="si">%s</span><span class="s">/'</span> <span class="o">%</span> <span class="n">name</span> <span class="k">else</span><span class="p">:</span> <span class="k">print</span> <span class="s">' </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="n">name</span> <span class="k">print</span> <span class="n">os</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="s">'example'</span><span class="p">)</span> <span class="n">os</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="s">'example/one'</span><span class="p">)</span> <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">'example/one/file.txt'</span><span class="p">,</span> <span class="s">'wt'</span><span class="p">)</span> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">'contents'</span><span class="p">)</span> <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s">'example/two.txt'</span><span class="p">,</span> <span class="s">'wt'</span><span class="p">)</span> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">'contents'</span><span class="p">)</span> <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="s">'example'</span><span class="p">,</span> <span class="n">visit</span><span class="p">,</span> <span class="s">'(User data)'</span><span class="p">)</span> </pre></div> </div> <div class="highlight-python"><pre>$ python ospath_walk.py example (User data) one/ two.txt example/one (User data) file.txt</pre> </div> <div class="admonition-see-also admonition seealso"> <p class="first admonition-title">See also</p> <dl class="last docutils"> <dt><a class="reference external" href="http://docs.python.org/lib/module-os.path.html">os.path</a></dt> <dd>Standard library documentation for this module.</dd> <dt><a class="reference internal" href="../os/index.html#module-os" title="os: Portable access to operating system specific features."><tt class="xref py py-mod docutils literal"><span class="pre">os</span></tt></a></dt> <dd>The os module is a parent of os.path.</dd> <dt><a class="reference internal" href="../articles/file_access.html#article-file-access"><em>File Access</em></a></dt> <dd>Other tools for working with files.</dd> </dl> </div> </div> </div> </div> </div> </div> <div class="clearer"></div> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" >index</a></li> <li class="right" > <a href="../py-modindex.html" title="Python Module Index" >modules</a> |</li> <li class="right" > <a href="../fileinput/index.html" title="fileinput – Process lines from input streams" >next</a> |</li> <li class="right" > <a href="../file_access.html" title="File and Directory Access" >previous</a> |</li> <li><a href="../contents.html">PyMOTW</a> »</li> <li><a href="../file_access.html" >File and Directory Access</a> »</li> </ul> </div> <div class="footer"> © Copyright Doug Hellmann. Last updated on Oct 24, 2010. Created using <a href="http://sphinx.pocoo.org/">Sphinx</a>. <br/><a href="http://creativecommons.org/licenses/by-nc-sa/3.0/us/" rel="license"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/us/88x31.png"/></a> </div> </body> </html>