blob: 0b2da66a00aea9e0e40d4c49dcd024e80d931e65 [file] [log] [blame]
Fred Drakeb23ee1d1999-02-01 20:20:39 +00001\section{\module{os.path} ---
2 Common pathname manipulations}
3\declaremodule{standard}{os.path}
Fred Drakeb91e9341998-07-23 17:59:49 +00004
Fred Drakeb23ee1d1999-02-01 20:20:39 +00005\modulesynopsis{Common pathname manipulations.}
Guido van Rossum470be141995-03-17 16:07:09 +00006
Fred Drakeb23ee1d1999-02-01 20:20:39 +00007This module implements some useful functions on pathnames.
Fred Drake203b4f11998-05-14 15:16:12 +00008\index{path!operations}
Guido van Rossum470be141995-03-17 16:07:09 +00009
Fred Drake0aa811c2001-10-20 04:24:09 +000010\warning{On Windows, many of these functions do not properly
Fred Drakebbf7a402001-09-28 16:14:18 +000011support UNC pathnames. \function{splitunc()} and \function{ismount()}
Fred Drake0aa811c2001-10-20 04:24:09 +000012do handle them correctly.}
Fred Drakebbf7a402001-09-28 16:14:18 +000013
Fred Drakeb23ee1d1999-02-01 20:20:39 +000014
Fred Drakea9b9bf91999-02-02 18:58:33 +000015\begin{funcdesc}{abspath}{path}
16Return a normalized absolutized version of the pathname \var{path}.
17On most platforms, this is equivalent to
Fred Drake39d4a021999-10-18 14:10:06 +000018\code{normpath(join(os.getcwd(), \var{path}))}.
Fred Drake154d9091999-03-17 22:25:11 +000019\versionadded{1.5.2}
Guido van Rossum1804dc31999-01-29 18:05:05 +000020\end{funcdesc}
21
Fred Drakea9b9bf91999-02-02 18:58:33 +000022\begin{funcdesc}{basename}{path}
23Return the base name of pathname \var{path}. This is the second half
Fred Drake3aecfc92000-10-26 21:38:23 +000024of the pair returned by \code{split(\var{path})}. Note that the
25result of this function is different from the
26\UNIX{} \program{basename} program; where \program{basename} for
27\code{'/foo/bar/'} returns \code{'bar'}, the \function{basename()}
28function returns an empty string (\code{''}).
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000029\end{funcdesc}
30
31\begin{funcdesc}{commonprefix}{list}
Skip Montanaro297bf7c2000-08-23 16:58:32 +000032Return the longest path prefix (taken character-by-character) that is a
33prefix of all paths in
Fred Drakeb23ee1d1999-02-01 20:20:39 +000034\var{list}. If \var{list} is empty, return the empty string
Skip Montanaro297bf7c2000-08-23 16:58:32 +000035(\code{''}). Note that this may return invalid paths because it works a
36character at a time.
Fred Drakeb23ee1d1999-02-01 20:20:39 +000037\end{funcdesc}
38
Fred Drakea9b9bf91999-02-02 18:58:33 +000039\begin{funcdesc}{dirname}{path}
40Return the directory name of pathname \var{path}. This is the first
41half of the pair returned by \code{split(\var{path})}.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000042\end{funcdesc}
43
Fred Drakea9b9bf91999-02-02 18:58:33 +000044\begin{funcdesc}{exists}{path}
Thomas Wouters0e3f5912006-08-11 14:57:12 +000045Return \code{True} if \var{path} refers to an existing path. Returns
46\code{False} for broken symbolic links. On some platforms, this
47function may return \code{False} if permission is not granted to
48execute \function{os.stat()} on the requested file, even if the
49\var{path} physically exists.
Johannes Gijsbersae882f72004-08-30 10:19:56 +000050\end{funcdesc}
51
52\begin{funcdesc}{lexists}{path}
53Return \code{True} if \var{path} refers to an existing path.
54Returns \code{True} for broken symbolic links.
55Equivalent to \function{exists()} on platforms lacking
56\function{os.lstat()}.
57\versionadded{2.4}
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000058\end{funcdesc}
59
Fred Drakea9b9bf91999-02-02 18:58:33 +000060\begin{funcdesc}{expanduser}{path}
Georg Brandl6f2bbd32005-08-24 07:26:55 +000061On \UNIX, return the argument with an initial component of \samp{\~} or
62\samp{\~\var{user}} replaced by that \var{user}'s home directory.
63An initial \samp{\~} is replaced by the environment variable
64\envvar{HOME} if it is set; otherwise the current user's home directory
65is looked up in the password directory through the built-in module
66\refmodule{pwd}\refbimodindex{pwd}.
67An initial \samp{\~\var{user}} is looked up directly in the
68password directory.
69
70On Windows, only \samp{\~} is supported; it is replaced by the
71environment variable \envvar{HOME} or by a combination of
72\envvar{HOMEDRIVE} and \envvar{HOMEPATH}.
73
74If the expansion fails or if the
Brett Cannon19021462004-12-22 05:40:45 +000075path does not begin with a tilde, the path is returned unchanged.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000076\end{funcdesc}
77
Fred Drakea9b9bf91999-02-02 18:58:33 +000078\begin{funcdesc}{expandvars}{path}
Guido van Rossum17383111994-04-21 10:32:28 +000079Return the argument with environment variables expanded. Substrings
80of the form \samp{\$\var{name}} or \samp{\$\{\var{name}\}} are
81replaced by the value of environment variable \var{name}. Malformed
82variable names and references to non-existing variables are left
Fred Drakea9b9bf91999-02-02 18:58:33 +000083unchanged.
Guido van Rossum17383111994-04-21 10:32:28 +000084\end{funcdesc}
85
Fred Draked8a41e61999-02-19 17:54:10 +000086\begin{funcdesc}{getatime}{path}
Neal Norwitzf3edea52002-12-31 13:38:28 +000087Return the time of last access of \var{path}. The return
Martin v. Löwis96a60e42002-12-31 13:11:54 +000088value is a number giving the number of seconds since the epoch (see the
Fred Draked8a41e61999-02-19 17:54:10 +000089\refmodule{time} module). Raise \exception{os.error} if the file does
90not exist or is inaccessible.
Fred Drakea9b9bf91999-02-02 18:58:33 +000091\versionadded{1.5.2}
Martin v. Löwis96a60e42002-12-31 13:11:54 +000092\versionchanged[If \function{os.stat_float_times()} returns True, the result is a floating point number]{2.3}
Guido van Rossum2babd7b1998-07-24 20:49:39 +000093\end{funcdesc}
94
Fred Drakea9b9bf91999-02-02 18:58:33 +000095\begin{funcdesc}{getmtime}{path}
Neal Norwitzf3edea52002-12-31 13:38:28 +000096Return the time of last modification of \var{path}. The return
Martin v. Löwis96a60e42002-12-31 13:11:54 +000097value is a number giving the number of seconds since the epoch (see the
Fred Drakeb23ee1d1999-02-01 20:20:39 +000098\refmodule{time} module). Raise \exception{os.error} if the file does
99not exist or is inaccessible.
Fred Drakea9b9bf91999-02-02 18:58:33 +0000100\versionadded{1.5.2}
Martin v. Löwis96a60e42002-12-31 13:11:54 +0000101\versionchanged[If \function{os.stat_float_times()} returns True, the result is a floating point number]{2.3}
102\end{funcdesc}
103
104\begin{funcdesc}{getctime}{path}
Raymond Hettingerc43a7e72003-10-29 00:46:19 +0000105Return the system's ctime which, on some systems (like \UNIX) is the
106time of the last change, and, on others (like Windows), is the
107creation time for \var{path}. The return
Martin v. Löwis96a60e42002-12-31 13:11:54 +0000108value is a number giving the number of seconds since the epoch (see the
109\refmodule{time} module). Raise \exception{os.error} if the file does
110not exist or is inaccessible.
111\versionadded{2.3}
Guido van Rossum2babd7b1998-07-24 20:49:39 +0000112\end{funcdesc}
113
Fred Draked8a41e61999-02-19 17:54:10 +0000114\begin{funcdesc}{getsize}{path}
Neal Norwitzf3edea52002-12-31 13:38:28 +0000115Return the size, in bytes, of \var{path}. Raise
Fred Draked8a41e61999-02-19 17:54:10 +0000116\exception{os.error} if the file does not exist or is inaccessible.
Fred Drakea9b9bf91999-02-02 18:58:33 +0000117\versionadded{1.5.2}
Guido van Rossum2babd7b1998-07-24 20:49:39 +0000118\end{funcdesc}
119
Fred Drakea9b9bf91999-02-02 18:58:33 +0000120\begin{funcdesc}{isabs}{path}
Neal Norwitzd3dab2b2002-04-05 02:21:09 +0000121Return \code{True} if \var{path} is an absolute pathname (begins with a
Fred Drakea9b9bf91999-02-02 18:58:33 +0000122slash).
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000123\end{funcdesc}
124
Fred Drakea9b9bf91999-02-02 18:58:33 +0000125\begin{funcdesc}{isfile}{path}
Neal Norwitzd3dab2b2002-04-05 02:21:09 +0000126Return \code{True} if \var{path} is an existing regular file. This follows
Fred Drakedb9693e1998-03-11 05:50:42 +0000127symbolic links, so both \function{islink()} and \function{isfile()}
128can be true for the same path.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000129\end{funcdesc}
130
Fred Drakea9b9bf91999-02-02 18:58:33 +0000131\begin{funcdesc}{isdir}{path}
Neal Norwitzd3dab2b2002-04-05 02:21:09 +0000132Return \code{True} if \var{path} is an existing directory. This follows
Fred Drakedb9693e1998-03-11 05:50:42 +0000133symbolic links, so both \function{islink()} and \function{isdir()} can
134be true for the same path.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000135\end{funcdesc}
136
Fred Drakea9b9bf91999-02-02 18:58:33 +0000137\begin{funcdesc}{islink}{path}
Neal Norwitzd3dab2b2002-04-05 02:21:09 +0000138Return \code{True} if \var{path} refers to a directory entry that is a
139symbolic link. Always \code{False} if symbolic links are not supported.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000140\end{funcdesc}
141
Fred Drakea9b9bf91999-02-02 18:58:33 +0000142\begin{funcdesc}{ismount}{path}
Neal Norwitzd3dab2b2002-04-05 02:21:09 +0000143Return \code{True} if pathname \var{path} is a \dfn{mount point}: a point in
Fred Drakea9b9bf91999-02-02 18:58:33 +0000144a file system where a different file system has been mounted. The
145function checks whether \var{path}'s parent, \file{\var{path}/..}, is
146on a different device than \var{path}, or whether \file{\var{path}/..}
147and \var{path} point to the same i-node on the same device --- this
148should detect mount points for all \UNIX{} and \POSIX{} variants.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000149\end{funcdesc}
150
Fred Drakea9b9bf91999-02-02 18:58:33 +0000151\begin{funcdesc}{join}{path1\optional{, path2\optional{, ...}}}
Thomas Wouters477c8d52006-05-27 19:21:47 +0000152Join one or more path components intelligently. If any component is
153an absolute path, all previous components (on Windows, including the
154previous drive letter, if there was one) are thrown away, and joining
Fred Drakea9b9bf91999-02-02 18:58:33 +0000155continues. The return value is the concatenation of \var{path1}, and
Fred Drakec1ddc502002-09-12 18:01:26 +0000156optionally \var{path2}, etc., with exactly one directory separator
Martin v. Löwis04791042002-12-11 12:55:53 +0000157(\code{os.sep}) inserted between components, unless \var{path2} is
Fred Drakec1ddc502002-09-12 18:01:26 +0000158empty. Note that on Windows, since there is a current directory for
159each drive, \function{os.path.join("c:", "foo")} represents a path
160relative to the current directory on drive \file{C:} (\file{c:foo}), not
161\file{c:\textbackslash\textbackslash foo}.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000162\end{funcdesc}
163
Fred Drakea9b9bf91999-02-02 18:58:33 +0000164\begin{funcdesc}{normcase}{path}
Fred Drakec37b65e2001-11-28 07:26:15 +0000165Normalize the case of a pathname. On \UNIX, this returns the path
Guido van Rossum1931c0c1998-02-18 14:00:05 +0000166unchanged; on case-insensitive filesystems, it converts the path to
167lowercase. On Windows, it also converts forward slashes to backward
168slashes.
169\end{funcdesc}
170
Fred Drakea9b9bf91999-02-02 18:58:33 +0000171\begin{funcdesc}{normpath}{path}
Guido van Rossum1931c0c1998-02-18 14:00:05 +0000172Normalize a pathname. This collapses redundant separators and
Georg Brandl6f2bbd32005-08-24 07:26:55 +0000173up-level references so that \code{A//B}, \code{A/./B} and
Guido van Rossum1931c0c1998-02-18 14:00:05 +0000174\code{A/foo/../B} all become \code{A/B}. It does not normalize the
Fred Drake38e5d272000-04-03 20:13:55 +0000175case (use \function{normcase()} for that). On Windows, it converts
Johannes Gijsbersb112d6e2004-08-14 14:41:32 +0000176forward slashes to backward slashes. It should be understood that this may
177change the meaning of the path if it contains symbolic links!
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000178\end{funcdesc}
179
Guido van Rossum83eeef42001-09-17 15:16:09 +0000180\begin{funcdesc}{realpath}{path}
181Return the canonical path of the specified filename, eliminating any
Georg Brandlddb73fe2006-03-08 20:59:09 +0000182symbolic links encountered in the path (if they are supported by the
183operating system).
Guido van Rossum83eeef42001-09-17 15:16:09 +0000184\versionadded{2.2}
185\end{funcdesc}
186
Fred Drakea9b9bf91999-02-02 18:58:33 +0000187\begin{funcdesc}{samefile}{path1, path2}
Neal Norwitzd3dab2b2002-04-05 02:21:09 +0000188Return \code{True} if both pathname arguments refer to the same file or
Fred Drakedb9693e1998-03-11 05:50:42 +0000189directory (as indicated by device number and i-node number).
190Raise an exception if a \function{os.stat()} call on either pathname
191fails.
Fred Drakec37b65e2001-11-28 07:26:15 +0000192Availability: Macintosh, \UNIX.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000193\end{funcdesc}
194
Fred Draked673d481999-02-03 22:31:30 +0000195\begin{funcdesc}{sameopenfile}{fp1, fp2}
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000196Return \code{True} if the file descriptors \var{fp1} and \var{fp2} refer
197to the same file.
Fred Drakec37b65e2001-11-28 07:26:15 +0000198Availability: Macintosh, \UNIX.
Fred Draked673d481999-02-03 22:31:30 +0000199\end{funcdesc}
200
201\begin{funcdesc}{samestat}{stat1, stat2}
Neal Norwitzd3dab2b2002-04-05 02:21:09 +0000202Return \code{True} if the stat tuples \var{stat1} and \var{stat2} refer to
Fred Draked673d481999-02-03 22:31:30 +0000203the same file. These structures may have been returned by
204\function{fstat()}, \function{lstat()}, or \function{stat()}. This
205function implements the underlying comparison used by
206\function{samefile()} and \function{sameopenfile()}.
Fred Drakec37b65e2001-11-28 07:26:15 +0000207Availability: Macintosh, \UNIX.
Fred Draked673d481999-02-03 22:31:30 +0000208\end{funcdesc}
209
Fred Drakea9b9bf91999-02-02 18:58:33 +0000210\begin{funcdesc}{split}{path}
Fred Draked673d481999-02-03 22:31:30 +0000211Split the pathname \var{path} into a pair, \code{(\var{head},
212\var{tail})} where \var{tail} is the last pathname component and
Fred Drakea9b9bf91999-02-02 18:58:33 +0000213\var{head} is everything leading up to that. The \var{tail} part will
214never contain a slash; if \var{path} ends in a slash, \var{tail} will
215be empty. If there is no slash in \var{path}, \var{head} will be
216empty. If \var{path} is empty, both \var{head} and \var{tail} are
217empty. Trailing slashes are stripped from \var{head} unless it is the
218root (one or more slashes only). In nearly all cases,
219\code{join(\var{head}, \var{tail})} equals \var{path} (the only
220exception being when there were multiple slashes separating \var{head}
221from \var{tail}).
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000222\end{funcdesc}
223
Fred Drake0256c1f1999-02-03 19:24:44 +0000224\begin{funcdesc}{splitdrive}{path}
225Split the pathname \var{path} into a pair \code{(\var{drive},
Fred Draked673d481999-02-03 22:31:30 +0000226\var{tail})} where \var{drive} is either a drive specification or the
Fred Drake0256c1f1999-02-03 19:24:44 +0000227empty string. On systems which do not use drive specifications,
228\var{drive} will always be the empty string. In all cases,
229\code{\var{drive} + \var{tail}} will be the same as \var{path}.
Fred Drake56a71ee2001-05-25 16:21:00 +0000230\versionadded{1.3}
Fred Drake0256c1f1999-02-03 19:24:44 +0000231\end{funcdesc}
232
Fred Drakea9b9bf91999-02-02 18:58:33 +0000233\begin{funcdesc}{splitext}{path}
Fred Drake0256c1f1999-02-03 19:24:44 +0000234Split the pathname \var{path} into a pair \code{(\var{root}, \var{ext})}
Fred Drakea9b9bf91999-02-02 18:58:33 +0000235such that \code{\var{root} + \var{ext} == \var{path}},
Guido van Rossum56b30ea1996-08-19 23:00:50 +0000236and \var{ext} is empty or begins with a period and contains
237at most one period.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000238\end{funcdesc}
239
Georg Brandl32252422005-09-14 20:42:00 +0000240\begin{funcdesc}{splitunc}{path}
241Split the pathname \var{path} into a pair \code{(\var{unc}, \var{rest})}
242so that \var{unc} is the UNC mount point (such as \code{r'\e\e host\e mount'}),
243if present, and \var{rest} the rest of the path (such as
244\code{r'\e path\e file.ext'}). For paths containing drive letters, \var{unc}
245will always be the empty string.
246Availability: Windows.
247\end{funcdesc}
248
Fred Drakea9b9bf91999-02-02 18:58:33 +0000249\begin{funcdesc}{walk}{path, visit, arg}
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000250Calls the function \var{visit} with arguments
251\code{(\var{arg}, \var{dirname}, \var{names})} for each directory in the
Fred Drakea9b9bf91999-02-02 18:58:33 +0000252directory tree rooted at \var{path} (including \var{path} itself, if it
253is a directory). The argument \var{dirname} specifies the visited
254directory, the argument \var{names} lists the files in the directory
255(gotten from \code{os.listdir(\var{dirname})}).
Guido van Rossume8e87991997-03-25 15:25:54 +0000256The \var{visit} function may modify \var{names} to
Georg Brandl6f2bbd32005-08-24 07:26:55 +0000257influence the set of directories visited below \var{dirname}, e.g. to
Guido van Rossum470be141995-03-17 16:07:09 +0000258avoid visiting certain parts of the tree. (The object referred to by
Fred Drakedb9693e1998-03-11 05:50:42 +0000259\var{names} must be modified in place, using \keyword{del} or slice
Guido van Rossum470be141995-03-17 16:07:09 +0000260assignment.)
Steve Holden545092b2002-08-06 16:07:07 +0000261
Fred Drake95fa4dd2002-08-07 12:39:33 +0000262\begin{notice}
263Symbolic links to directories are not treated as subdirectories, and
264that \function{walk()} therefore will not visit them. To visit linked
265directories you must identify them with
266\code{os.path.islink(\var{file})} and
267\code{os.path.isdir(\var{file})}, and invoke \function{walk()} as
268necessary.
269\end{notice}
Tim Petersc4e09402003-04-25 07:11:48 +0000270
Fred Drake9f480452003-04-25 15:12:47 +0000271\note{The newer \function{\refmodule{os}.walk()} generator supplies
272 similar functionality and can be easier to use.}
Guido van Rossum5fdeeea1994-01-02 01:22:07 +0000273\end{funcdesc}
Fred Drake604ade42003-02-04 19:13:07 +0000274
275\begin{datadesc}{supports_unicode_filenames}
276True if arbitrary Unicode strings can be used as file names (within
277limitations imposed by the file system), and if
278\function{os.listdir()} returns Unicode strings for a Unicode
279argument.
280\versionadded{2.3}
281\end{datadesc}