\section{\module{os.path} ---
         Common pathname manipulations}
\declaremodule{standard}{os.path}

\modulesynopsis{Common pathname manipulations.}

This module implements some useful functions on pathnames.
\index{path!operations}

\warning{On Windows, many of these functions do not properly
support UNC pathnames.  \function{splitunc()} and \function{ismount()}
do handle them correctly.}


\begin{funcdesc}{abspath}{path}
Return a normalized absolutized version of the pathname \var{path}.
On most platforms, this is equivalent to
\code{normpath(join(os.getcwd(), \var{path}))}.
\versionadded{1.5.2}
\end{funcdesc}

\begin{funcdesc}{basename}{path}
Return the base name of pathname \var{path}.  This is the second half
of the pair returned by \code{split(\var{path})}.  Note that the
result of this function is different from the
\UNIX{} \program{basename} program; where \program{basename} for
\code{'/foo/bar/'} returns \code{'bar'}, the \function{basename()}
function returns an empty string (\code{''}).
\end{funcdesc}

\begin{funcdesc}{commonprefix}{list}
Return the longest path prefix (taken character-by-character) that is a
prefix of all paths in 
\var{list}.  If \var{list} is empty, return the empty string
(\code{''}).  Note that this may return invalid paths because it works a
character at a time.
\end{funcdesc}

\begin{funcdesc}{dirname}{path}
Return the directory name of pathname \var{path}.  This is the first
half of the pair returned by \code{split(\var{path})}.
\end{funcdesc}

\begin{funcdesc}{exists}{path}
Return \code{True} if \var{path} refers to an existing path.
\end{funcdesc}

\begin{funcdesc}{expanduser}{path}
Return the argument with an initial component of \samp{\~} or
\samp{\~\var{user}} replaced by that \var{user}'s home directory.  An
initial \samp{\~{}} is replaced by the environment variable
\envvar{HOME}; an initial \samp{\~\var{user}} is looked up in the
password directory through the built-in module
\refmodule{pwd}\refbimodindex{pwd}.  If the expansion fails, or if the
path does not begin with a tilde, the path is returned unchanged.  On
the Macintosh, this always returns \var{path} unchanged.
\end{funcdesc}

\begin{funcdesc}{expandvars}{path}
Return the argument with environment variables expanded.  Substrings
of the form \samp{\$\var{name}} or \samp{\$\{\var{name}\}} are
replaced by the value of environment variable \var{name}.  Malformed
variable names and references to non-existing variables are left
unchanged.  On the Macintosh, this always returns \var{path}
unchanged.
\end{funcdesc}

\begin{funcdesc}{getatime}{path}
Return the time of last access of \var{path}.  The return
value is a number giving the number of seconds since the epoch (see the 
\refmodule{time} module).  Raise \exception{os.error} if the file does
not exist or is inaccessible.
\versionadded{1.5.2}
\versionchanged[If \function{os.stat_float_times()} returns True, the result is a floating point number]{2.3}
\end{funcdesc}

\begin{funcdesc}{getmtime}{path}
Return the time of last modification of \var{path}.  The return
value is a number giving the number of seconds since the epoch (see the 
\refmodule{time} module).  Raise \exception{os.error} if the file does
not exist or is inaccessible.
\versionadded{1.5.2}
\versionchanged[If \function{os.stat_float_times()} returns True, the result is a floating point number]{2.3}
\end{funcdesc}

\begin{funcdesc}{getctime}{path}
Return the time of creation of \var{path}.  The return
value is a number giving the number of seconds since the epoch (see the 
\refmodule{time} module).  Raise \exception{os.error} if the file does
not exist or is inaccessible.
\versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{getsize}{path}
Return the size, in bytes, of \var{path}.  Raise
\exception{os.error} if the file does not exist or is inaccessible.
\versionadded{1.5.2}
\end{funcdesc}

\begin{funcdesc}{isabs}{path}
Return \code{True} if \var{path} is an absolute pathname (begins with a
slash).
\end{funcdesc}

\begin{funcdesc}{isfile}{path}
Return \code{True} if \var{path} is an existing regular file.  This follows
symbolic links, so both \function{islink()} and \function{isfile()}
can be true for the same path.
\end{funcdesc}

\begin{funcdesc}{isdir}{path}
Return \code{True} if \var{path} is an existing directory.  This follows
symbolic links, so both \function{islink()} and \function{isdir()} can
be true for the same path.
\end{funcdesc}

\begin{funcdesc}{islink}{path}
Return \code{True} if \var{path} refers to a directory entry that is a
symbolic link.  Always \code{False} if symbolic links are not supported.
\end{funcdesc}

\begin{funcdesc}{ismount}{path}
Return \code{True} if pathname \var{path} is a \dfn{mount point}: a point in
a file system where a different file system has been mounted.  The
function checks whether \var{path}'s parent, \file{\var{path}/..}, is
on a different device than \var{path}, or whether \file{\var{path}/..}
and \var{path} point to the same i-node on the same device --- this
should detect mount points for all \UNIX{} and \POSIX{} variants.
\end{funcdesc}

\begin{funcdesc}{join}{path1\optional{, path2\optional{, ...}}}
Joins one or more path components intelligently.  If any component is
an absolute path, all previous components are thrown away, and joining
continues.  The return value is the concatenation of \var{path1}, and
optionally \var{path2}, etc., with exactly one directory separator
(\code{os.sep}) inserted between components, unless \var{path2} is
empty.  Note that on Windows, since there is a current directory for
each drive, \function{os.path.join("c:", "foo")} represents a path
relative to the current directory on drive \file{C:} (\file{c:foo}), not
\file{c:\textbackslash\textbackslash foo}.
\end{funcdesc}

\begin{funcdesc}{normcase}{path}
Normalize the case of a pathname.  On \UNIX, this returns the path
unchanged; on case-insensitive filesystems, it converts the path to
lowercase.  On Windows, it also converts forward slashes to backward
slashes.
\end{funcdesc}

\begin{funcdesc}{normpath}{path}
Normalize a pathname.  This collapses redundant separators and
up-level references, e.g. \code{A//B}, \code{A/./B} and
\code{A/foo/../B} all become \code{A/B}.  It does not normalize the
case (use \function{normcase()} for that).  On Windows, it converts
forward slashes to backward slashes.
\end{funcdesc}

\begin{funcdesc}{realpath}{path}
Return the canonical path of the specified filename, eliminating any
symbolic links encountered in the path.
Availability:  \UNIX.
\versionadded{2.2}
\end{funcdesc}

\begin{funcdesc}{samefile}{path1, path2}
Return \code{True} if both pathname arguments refer to the same file or
directory (as indicated by device number and i-node number).
Raise an exception if a \function{os.stat()} call on either pathname
fails.
Availability:  Macintosh, \UNIX.
\end{funcdesc}

\begin{funcdesc}{sameopenfile}{fp1, fp2}
Return \code{True} if the file objects \var{fp1} and \var{fp2} refer to the
same file.  The two file objects may represent different file
descriptors.
Availability:  Macintosh, \UNIX.
\end{funcdesc}

\begin{funcdesc}{samestat}{stat1, stat2}
Return \code{True} if the stat tuples \var{stat1} and \var{stat2} refer to
the same file.  These structures may have been returned by
\function{fstat()}, \function{lstat()}, or \function{stat()}.  This
function implements the underlying comparison used by
\function{samefile()} and \function{sameopenfile()}.
Availability:  Macintosh, \UNIX.
\end{funcdesc}

\begin{funcdesc}{split}{path}
Split the pathname \var{path} into a pair, \code{(\var{head},
\var{tail})} where \var{tail} is the last pathname component and
\var{head} is everything leading up to that.  The \var{tail} part will
never contain a slash; if \var{path} ends in a slash, \var{tail} will
be empty.  If there is no slash in \var{path}, \var{head} will be
empty.  If \var{path} is empty, both \var{head} and \var{tail} are
empty.  Trailing slashes are stripped from \var{head} unless it is the
root (one or more slashes only).  In nearly all cases,
\code{join(\var{head}, \var{tail})} equals \var{path} (the only
exception being when there were multiple slashes separating \var{head}
from \var{tail}).
\end{funcdesc}

\begin{funcdesc}{splitdrive}{path}
Split the pathname \var{path} into a pair \code{(\var{drive},
\var{tail})} where \var{drive} is either a drive specification or the
empty string.  On systems which do not use drive specifications,
\var{drive} will always be the empty string.  In all cases,
\code{\var{drive} + \var{tail}} will be the same as \var{path}.
\versionadded{1.3}
\end{funcdesc}

\begin{funcdesc}{splitext}{path}
Split the pathname \var{path} into a pair \code{(\var{root}, \var{ext})} 
such that \code{\var{root} + \var{ext} == \var{path}},
and \var{ext} is empty or begins with a period and contains
at most one period.
\end{funcdesc}

\begin{funcdesc}{walk}{path, visit, arg}
Calls the function \var{visit} with arguments
\code{(\var{arg}, \var{dirname}, \var{names})} for each directory in the
directory tree rooted at \var{path} (including \var{path} itself, if it
is a directory).  The argument \var{dirname} specifies the visited
directory, the argument \var{names} lists the files in the directory
(gotten from \code{os.listdir(\var{dirname})}).
The \var{visit} function may modify \var{names} to
influence the set of directories visited below \var{dirname}, e.g., to
avoid visiting certain parts of the tree.  (The object referred to by
\var{names} must be modified in place, using \keyword{del} or slice
assignment.)

\begin{notice}
Symbolic links to directories are not treated as subdirectories, and
that \function{walk()} therefore will not visit them. To visit linked
directories you must identify them with
\code{os.path.islink(\var{file})} and
\code{os.path.isdir(\var{file})}, and invoke \function{walk()} as
necessary.
\end{notice}
\end{funcdesc}

\begin{datadesc}{supports_unicode_filenames}
True if arbitrary Unicode strings can be used as file names (within
limitations imposed by the file system), and if
\function{os.listdir()} returns Unicode strings for a Unicode
argument.
\versionadded{2.3}
\end{datadesc}
