[code.view]

[top] / python / PyMOTW / docs / ospath / index.html


<!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. &mdash; 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> &raquo;</li>
          <li><a href="../file_access.html" accesskey="U">File and Directory Access</a> &raquo;</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 &#8211; 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 &#8211; 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 &#8211; 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.,
&#8220;<tt class="docutils literal"><span class="pre">/</span></tt>&#8221; or &#8220;<tt class="docutils literal"><span class="pre">\</span></tt>&#8221;).</li>
<li><tt class="docutils literal"><span class="pre">os.extsep</span></tt> - The separator between a filename and the file
&#8220;extension&#8221; (e.g., &#8220;<tt class="docutils literal"><span class="pre">.</span></tt>&#8221;).</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., &#8220;<tt class="docutils literal"><span class="pre">..</span></tt>&#8221;).</li>
<li><tt class="docutils literal"><span class="pre">os.curdir</span></tt> - The path component that refers to the current
directory (e.g., &#8220;<tt class="docutils literal"><span class="pre">.</span></tt>&#8221;).</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">&#39;/one/two/three&#39;</span><span class="p">,</span> 
              <span class="s">&#39;/one/two/three/&#39;</span><span class="p">,</span>
              <span class="s">&#39;/&#39;</span><span class="p">,</span>
              <span class="s">&#39;.&#39;</span><span class="p">,</span>
              <span class="s">&#39;&#39;</span><span class="p">]:</span>
    <span class="k">print</span> <span class="s">&#39;&quot;</span><span class="si">%s</span><span class="s">&quot; : &quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</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">&#39;/one/two/three&#39;</span><span class="p">,</span> 
              <span class="s">&#39;/one/two/three/&#39;</span><span class="p">,</span>
              <span class="s">&#39;/&#39;</span><span class="p">,</span>
              <span class="s">&#39;.&#39;</span><span class="p">,</span>
              <span class="s">&#39;&#39;</span><span class="p">]:</span>
    <span class="k">print</span> <span class="s">&#39;&quot;</span><span class="si">%s</span><span class="s">&quot; : &quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</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">&#39;/one/two/three&#39;</span><span class="p">,</span> 
              <span class="s">&#39;/one/two/three/&#39;</span><span class="p">,</span>
              <span class="s">&#39;/&#39;</span><span class="p">,</span>
              <span class="s">&#39;.&#39;</span><span class="p">,</span>
              <span class="s">&#39;&#39;</span><span class="p">]:</span>
    <span class="k">print</span> <span class="s">&#39;&quot;</span><span class="si">%s</span><span class="s">&quot; : &quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</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">&#39;filename.txt&#39;</span><span class="p">,</span> <span class="s">&#39;filename&#39;</span><span class="p">,</span> <span class="s">&#39;/path/to/filename.txt&#39;</span><span class="p">,</span> <span class="s">&#39;/&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span> <span class="p">]:</span>
    <span class="k">print</span> <span class="s">&#39;&quot;</span><span class="si">%s</span><span class="s">&quot; :&#39;</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">&#39;/one/two/three/four&#39;</span><span class="p">,</span>
         <span class="s">&#39;/one/two/threefold&#39;</span><span class="p">,</span>
         <span class="s">&#39;/one/two/three/&#39;</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">&#39;one&#39;</span><span class="p">,</span> <span class="s">&#39;two&#39;</span><span class="p">,</span> <span class="s">&#39;three&#39;</span><span class="p">),</span>
               <span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">,</span> <span class="s">&#39;one&#39;</span><span class="p">,</span> <span class="s">&#39;two&#39;</span><span class="p">,</span> <span class="s">&#39;three&#39;</span><span class="p">),</span>
               <span class="p">(</span><span class="s">&#39;/one&#39;</span><span class="p">,</span> <span class="s">&#39;/two&#39;</span><span class="p">,</span> <span class="s">&#39;/three&#39;</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">&#39;:&#39;</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&#8217;s also easy to work with paths that include &#8220;variable&#8221; 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&#8217;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">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;dhellmann&#39;</span><span class="p">,</span> <span class="s">&#39;postgres&#39;</span> <span class="p">]:</span>
    <span class="n">lookup</span> <span class="o">=</span> <span class="s">&#39;~&#39;</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">&#39;:&#39;</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">&#39;MYVAR&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;VALUE&#39;</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">&#39;/path/to/$MYVAR&#39;</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">&#39;one//two//three&#39;</span><span class="p">,</span> 
              <span class="s">&#39;one/./two/./three&#39;</span><span class="p">,</span> 
              <span class="s">&#39;one/../one/two/three&#39;</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">&#39;:&#39;</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">&#39;.&#39;</span><span class="p">,</span> <span class="s">&#39;..&#39;</span><span class="p">,</span> <span class="s">&#39;./one/two/three&#39;</span><span class="p">,</span> <span class="s">&#39;../one/two/three&#39;</span><span class="p">]:</span>
    <span class="k">print</span> <span class="s">&#39;&quot;</span><span class="si">%s</span><span class="s">&quot; : &quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</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">&#39;File         :&#39;</span><span class="p">,</span> <span class="n">__file__</span>
<span class="k">print</span> <span class="s">&#39;Access time  :&#39;</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">&#39;Modified time:&#39;</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">&#39;Change time  :&#39;</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">&#39;Size         :&#39;</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">&#39;/&#39;</span><span class="p">,</span> <span class="s">&#39;./broken_link&#39;</span><span class="p">]:</span>
    <span class="k">print</span> <span class="s">&#39;File        :&#39;</span><span class="p">,</span> <span class="nb">file</span>
    <span class="k">print</span> <span class="s">&#39;Absolute    :&#39;</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">&#39;Is File?    :&#39;</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">&#39;Is Dir?     :&#39;</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">&#39;Is Link?    :&#39;</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">&#39;Mountpoint? :&#39;</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">&#39;Exists?     :&#39;</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">&#39;Link Exists?:&#39;</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">&#39;  </span><span class="si">%s</span><span class="s">/&#39;</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">&#39;  </span><span class="si">%s</span><span class="s">&#39;</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">&#39;example&#39;</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">&#39;example/one&#39;</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">&#39;example/one/file.txt&#39;</span><span class="p">,</span> <span class="s">&#39;wt&#39;</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">&#39;contents&#39;</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">&#39;example/two.txt&#39;</span><span class="p">,</span> <span class="s">&#39;wt&#39;</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">&#39;contents&#39;</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">&#39;example&#39;</span><span class="p">,</span> <span class="n">visit</span><span class="p">,</span> <span class="s">&#39;(User data)&#39;</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> &raquo;</li>
          <li><a href="../file_access.html" >File and Directory Access</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
      &copy; 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>

[top] / python / PyMOTW / docs / ospath / index.html

contact | logmethods.com