blob: 1053fa35db5adfa90e6cc464a42dda7d9890e0f7 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`os.path` --- Common pathname manipulations
2================================================
3
4.. module:: os.path
5 :synopsis: Operations on pathnames.
6
Georg Brandl116aa622007-08-15 14:28:22 +00007.. index:: single: path; operations
8
9This module implements some useful functions on pathnames. To read or
10write files see :func:`open`, and for accessing the filesystem see the
Martin v. Löwis651423c2008-10-07 07:03:04 +000011:mod:`os` module. The path parameters can be passed as either strings,
12or bytes. Applications are encouraged to represent file names as
13(Unicode) character strings. Unfortunately, some file names may not be
14representable as strings on Unix, so applications that need to support
15arbitrary file names on Unix should use bytes objects to represent
16path names. Vice versa, using bytes objects cannot represent all file
17names on Windows (in the standard ``mbcs`` encoding), hence Windows
18applications should use string objects to access all files.
Georg Brandl116aa622007-08-15 14:28:22 +000019
Georg Brandl76e55382008-10-08 16:34:57 +000020.. note::
21
22 All of these functions accept either only bytes or only string objects as
23 their parameters. The result is an object of the same type, if a path or
24 file name is returned.
25
Georg Brandl116aa622007-08-15 14:28:22 +000026
Benjamin Petersond23f8222009-04-05 19:13:16 +000027.. note::
28
29 Since different operating systems have different path name conventions, there
30 are several versions of this module in the standard library. The
31 :mod:`os.path` module is always the path module suitable for the operating
32 system Python is running on, and therefore usable for local paths. However,
33 you can also import and use the individual modules if you want to manipulate
34 a path that is *always* in one of the different formats. They all have the
35 same interface:
36
37 * :mod:`posixpath` for UNIX-style paths
38 * :mod:`ntpath` for Windows paths
39 * :mod:`macpath` for old-style MacOS paths
Benjamin Petersond23f8222009-04-05 19:13:16 +000040
41
Georg Brandl116aa622007-08-15 14:28:22 +000042.. function:: abspath(path)
43
44 Return a normalized absolutized version of the pathname *path*. On most
45 platforms, this is equivalent to ``normpath(join(os.getcwd(), path))``.
46
Georg Brandl116aa622007-08-15 14:28:22 +000047
48.. function:: basename(path)
49
50 Return the base name of pathname *path*. This is the second half of the pair
51 returned by ``split(path)``. Note that the result of this function is different
52 from the Unix :program:`basename` program; where :program:`basename` for
53 ``'/foo/bar/'`` returns ``'bar'``, the :func:`basename` function returns an
54 empty string (``''``).
55
56
57.. function:: commonprefix(list)
58
59 Return the longest path prefix (taken character-by-character) that is a prefix
60 of all paths in *list*. If *list* is empty, return the empty string (``''``).
61 Note that this may return invalid paths because it works a character at a time.
62
63
64.. function:: dirname(path)
65
66 Return the directory name of pathname *path*. This is the first half of the
67 pair returned by ``split(path)``.
68
69
70.. function:: exists(path)
71
Richard Oudkerk2240ac12012-07-06 12:05:32 +010072 Return ``True`` if *path* refers to an existing path or an open
73 file descriptor. Returns ``False`` for broken symbolic links. On
74 some platforms, this function may return ``False`` if permission is
75 not granted to execute :func:`os.stat` on the requested file, even
Georg Brandl116aa622007-08-15 14:28:22 +000076 if the *path* physically exists.
77
Richard Oudkerk2240ac12012-07-06 12:05:32 +010078 .. versionchanged:: 3.3
79 *path* can now be an integer: ``True`` is returned if it is an
80 open file descriptor, ``False`` otherwise.
81
Georg Brandl116aa622007-08-15 14:28:22 +000082
83.. function:: lexists(path)
84
85 Return ``True`` if *path* refers to an existing path. Returns ``True`` for
86 broken symbolic links. Equivalent to :func:`exists` on platforms lacking
87 :func:`os.lstat`.
88
Georg Brandl116aa622007-08-15 14:28:22 +000089
90.. function:: expanduser(path)
91
92 On Unix and Windows, return the argument with an initial component of ``~`` or
93 ``~user`` replaced by that *user*'s home directory.
94
95 .. index:: module: pwd
96
97 On Unix, an initial ``~`` is replaced by the environment variable :envvar:`HOME`
98 if it is set; otherwise the current user's home directory is looked up in the
99 password directory through the built-in module :mod:`pwd`. An initial ``~user``
100 is looked up directly in the password directory.
101
102 On Windows, :envvar:`HOME` and :envvar:`USERPROFILE` will be used if set,
103 otherwise a combination of :envvar:`HOMEPATH` and :envvar:`HOMEDRIVE` will be
104 used. An initial ``~user`` is handled by stripping the last directory component
105 from the created user path derived above.
106
107 If the expansion fails or if the path does not begin with a tilde, the path is
108 returned unchanged.
109
110
111.. function:: expandvars(path)
112
113 Return the argument with environment variables expanded. Substrings of the form
114 ``$name`` or ``${name}`` are replaced by the value of environment variable
115 *name*. Malformed variable names and references to non-existing variables are
116 left unchanged.
117
118 On Windows, ``%name%`` expansions are supported in addition to ``$name`` and
119 ``${name}``.
120
121
122.. function:: getatime(path)
123
124 Return the time of last access of *path*. The return value is a number giving
125 the number of seconds since the epoch (see the :mod:`time` module). Raise
126 :exc:`os.error` if the file does not exist or is inaccessible.
127
Georg Brandl55ac8f02007-09-01 13:51:09 +0000128 If :func:`os.stat_float_times` returns True, the result is a floating point
129 number.
Georg Brandl116aa622007-08-15 14:28:22 +0000130
131
132.. function:: getmtime(path)
133
134 Return the time of last modification of *path*. The return value is a number
135 giving the number of seconds since the epoch (see the :mod:`time` module).
136 Raise :exc:`os.error` if the file does not exist or is inaccessible.
137
Georg Brandl55ac8f02007-09-01 13:51:09 +0000138 If :func:`os.stat_float_times` returns True, the result is a floating point
139 number.
Georg Brandl116aa622007-08-15 14:28:22 +0000140
141
142.. function:: getctime(path)
143
144 Return the system's ctime which, on some systems (like Unix) is the time of the
145 last change, and, on others (like Windows), is the creation time for *path*.
146 The return value is a number giving the number of seconds since the epoch (see
147 the :mod:`time` module). Raise :exc:`os.error` if the file does not exist or
148 is inaccessible.
149
Georg Brandl116aa622007-08-15 14:28:22 +0000150
151.. function:: getsize(path)
152
153 Return the size, in bytes, of *path*. Raise :exc:`os.error` if the file does
154 not exist or is inaccessible.
155
Georg Brandl116aa622007-08-15 14:28:22 +0000156
157.. function:: isabs(path)
158
Christian Heimesaf98da12008-01-27 15:18:18 +0000159 Return ``True`` if *path* is an absolute pathname. On Unix, that means it
160 begins with a slash, on Windows that it begins with a (back)slash after chopping
161 off a potential drive letter.
Georg Brandl116aa622007-08-15 14:28:22 +0000162
163
164.. function:: isfile(path)
165
166 Return ``True`` if *path* is an existing regular file. This follows symbolic
167 links, so both :func:`islink` and :func:`isfile` can be true for the same path.
168
169
170.. function:: isdir(path)
171
172 Return ``True`` if *path* is an existing directory. This follows symbolic
173 links, so both :func:`islink` and :func:`isdir` can be true for the same path.
174
175
176.. function:: islink(path)
177
178 Return ``True`` if *path* refers to a directory entry that is a symbolic link.
179 Always ``False`` if symbolic links are not supported.
180
181
182.. function:: ismount(path)
183
184 Return ``True`` if pathname *path* is a :dfn:`mount point`: a point in a file
185 system where a different file system has been mounted. The function checks
186 whether *path*'s parent, :file:`path/..`, is on a different device than *path*,
187 or whether :file:`path/..` and *path* point to the same i-node on the same
188 device --- this should detect mount points for all Unix and POSIX variants.
189
190
191.. function:: join(path1[, path2[, ...]])
192
193 Join one or more path components intelligently. If any component is an absolute
194 path, all previous components (on Windows, including the previous drive letter,
195 if there was one) are thrown away, and joining continues. The return value is
196 the concatenation of *path1*, and optionally *path2*, etc., with exactly one
R David Murray24eb4bc2011-06-23 21:26:13 -0400197 directory separator (``os.sep``) following each non-empty part except the last.
198 (This means that an empty last part will result in a path that ends with a
199 separator.) Note that on Windows, since there is a current directory for
200 each drive, ``os.path.join("c:", "foo")`` represents a path relative to the
201 current directory on drive :file:`C:` (:file:`c:foo`), not :file:`c:\\foo`.
Georg Brandl116aa622007-08-15 14:28:22 +0000202
203
204.. function:: normcase(path)
205
Benjamin Petersond23f8222009-04-05 19:13:16 +0000206 Normalize the case of a pathname. On Unix and Mac OS X, this returns the
207 path unchanged; on case-insensitive filesystems, it converts the path to
208 lowercase. On Windows, it also converts forward slashes to backward slashes.
Ezio Melotti5a3ef5b2010-06-25 10:56:11 +0000209 Raise a TypeError if the type of *path* is not ``str`` or ``bytes``.
Georg Brandl116aa622007-08-15 14:28:22 +0000210
211
212.. function:: normpath(path)
213
214 Normalize a pathname. This collapses redundant separators and up-level
Georg Brandl353ebce2010-08-02 19:19:26 +0000215 references so that ``A//B``, ``A/B/``, ``A/./B`` and ``A/foo/../B`` all become
216 ``A/B``.
217
Georg Brandl116aa622007-08-15 14:28:22 +0000218 It does not normalize the case (use :func:`normcase` for that). On Windows, it
219 converts forward slashes to backward slashes. It should be understood that this
220 may change the meaning of the path if it contains symbolic links!
221
222
223.. function:: realpath(path)
224
225 Return the canonical path of the specified filename, eliminating any symbolic
226 links encountered in the path (if they are supported by the operating system).
227
Georg Brandl116aa622007-08-15 14:28:22 +0000228
Georg Brandl18244152009-09-02 20:34:52 +0000229.. function:: relpath(path, start=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000230
231 Return a relative filepath to *path* either from the current directory or from
232 an optional *start* point.
233
Benjamin Petersonf650e462010-05-06 23:03:05 +0000234 *start* defaults to :attr:`os.curdir`.
235
Antoine Pitrouf10f1622010-12-12 20:17:29 +0000236 Availability: Unix, Windows.
Georg Brandl116aa622007-08-15 14:28:22 +0000237
Georg Brandl116aa622007-08-15 14:28:22 +0000238
239.. function:: samefile(path1, path2)
240
Brian Curtind40e6f72010-07-08 21:39:08 +0000241 Return ``True`` if both pathname arguments refer to the same file or directory.
242 On Unix, this is determined by the device number and i-node number and raises an
243 exception if a :func:`os.stat` call on either pathname fails.
Benjamin Petersonf650e462010-05-06 23:03:05 +0000244
Brian Curtind40e6f72010-07-08 21:39:08 +0000245 On Windows, two files are the same if they resolve to the same final path
Brian Curtinc7395692010-07-09 15:15:09 +0000246 name using the Windows API call GetFinalPathNameByHandle. This function
Brian Curtind40e6f72010-07-08 21:39:08 +0000247 raises an exception if handles cannot be obtained to either file.
248
Antoine Pitrouf10f1622010-12-12 20:17:29 +0000249 Availability: Unix, Windows.
Georg Brandl116aa622007-08-15 14:28:22 +0000250
Georg Brandlb3823372010-07-10 08:58:37 +0000251 .. versionchanged:: 3.2
252 Added Windows support.
Brian Curtinc7395692010-07-09 15:15:09 +0000253
Georg Brandl116aa622007-08-15 14:28:22 +0000254
255.. function:: sameopenfile(fp1, fp2)
256
257 Return ``True`` if the file descriptors *fp1* and *fp2* refer to the same file.
Benjamin Petersonf650e462010-05-06 23:03:05 +0000258
Brian Curtin62857742010-09-06 17:07:27 +0000259 Availability: Unix, Windows.
260
Georg Brandl61063cc2012-06-24 22:48:30 +0200261 .. versionchanged:: 3.2
262 Added Windows support.
Georg Brandl116aa622007-08-15 14:28:22 +0000263
264
265.. function:: samestat(stat1, stat2)
266
267 Return ``True`` if the stat tuples *stat1* and *stat2* refer to the same file.
268 These structures may have been returned by :func:`fstat`, :func:`lstat`, or
269 :func:`stat`. This function implements the underlying comparison used by
Benjamin Petersonf650e462010-05-06 23:03:05 +0000270 :func:`samefile` and :func:`sameopenfile`.
271
272 Availability: Unix.
Georg Brandl116aa622007-08-15 14:28:22 +0000273
274
275.. function:: split(path)
276
Georg Brandl539c1652010-10-14 06:46:08 +0000277 Split the pathname *path* into a pair, ``(head, tail)`` where *tail* is the
278 last pathname component and *head* is everything leading up to that. The
279 *tail* part will never contain a slash; if *path* ends in a slash, *tail*
280 will be empty. If there is no slash in *path*, *head* will be empty. If
281 *path* is empty, both *head* and *tail* are empty. Trailing slashes are
282 stripped from *head* unless it is the root (one or more slashes only). In
283 all cases, ``join(head, tail)`` returns a path to the same location as *path*
284 (but the strings may differ).
Georg Brandl116aa622007-08-15 14:28:22 +0000285
286
287.. function:: splitdrive(path)
288
289 Split the pathname *path* into a pair ``(drive, tail)`` where *drive* is either
Mark Hammond5a607a32009-05-06 08:04:54 +0000290 a mount point or the empty string. On systems which do not use drive
Georg Brandl116aa622007-08-15 14:28:22 +0000291 specifications, *drive* will always be the empty string. In all cases, ``drive
292 + tail`` will be the same as *path*.
293
Mark Hammond5a607a32009-05-06 08:04:54 +0000294 On Windows, splits a pathname into drive/UNC sharepoint and relative path.
295
296 If the path contains a drive letter, drive will contain everything
297 up to and including the colon.
298 e.g. ``splitdrive("c:/dir")`` returns ``("c:", "/dir")``
299
300 If the path contains a UNC path, drive will contain the host name
301 and share, up to but not including the fourth separator.
302 e.g. ``splitdrive("//host/computer/dir")`` returns ``("//host/computer", "/dir")``
303
Georg Brandl116aa622007-08-15 14:28:22 +0000304
305.. function:: splitext(path)
306
307 Split the pathname *path* into a pair ``(root, ext)`` such that ``root + ext ==
308 path``, and *ext* is empty or begins with a period and contains at most one
309 period. Leading periods on the basename are ignored; ``splitext('.cshrc')``
310 returns ``('.cshrc', '')``.
311
Georg Brandl116aa622007-08-15 14:28:22 +0000312
313.. function:: splitunc(path)
314
Mark Hammond5a607a32009-05-06 08:04:54 +0000315 .. deprecated:: 3.1
316 Use *splitdrive* instead.
317
Georg Brandl116aa622007-08-15 14:28:22 +0000318 Split the pathname *path* into a pair ``(unc, rest)`` so that *unc* is the UNC
319 mount point (such as ``r'\\host\mount'``), if present, and *rest* the rest of
320 the path (such as ``r'\path\file.ext'``). For paths containing drive letters,
Benjamin Petersonf650e462010-05-06 23:03:05 +0000321 *unc* will always be the empty string.
322
323 Availability: Windows.
Georg Brandl116aa622007-08-15 14:28:22 +0000324
325
Georg Brandl116aa622007-08-15 14:28:22 +0000326.. data:: supports_unicode_filenames
327
328 True if arbitrary Unicode strings can be used as file names (within limitations
Victor Stinnerb55e4982010-09-11 00:22:12 +0000329 imposed by the file system).