1:mod:`os.path` --- Common pathname manipulations 2================================================ 3 4.. module:: os.path 5 :synopsis: Operations on pathnames. 6 7**Source code:** :source:`Lib/posixpath.py` (for POSIX), 8:source:`Lib/ntpath.py` (for Windows NT), 9and :source:`Lib/macpath.py` (for Macintosh) 10 11.. index:: single: path; operations 12 13-------------- 14 15This module implements some useful functions on pathnames. To read or 16write files see :func:`open`, and for accessing the filesystem see the 17:mod:`os` module. The path parameters can be passed as either strings, 18or bytes. Applications are encouraged to represent file names as 19(Unicode) character strings. Unfortunately, some file names may not be 20representable as strings on Unix, so applications that need to support 21arbitrary file names on Unix should use bytes objects to represent 22path names. Vice versa, using bytes objects cannot represent all file 23names on Windows (in the standard ``mbcs`` encoding), hence Windows 24applications should use string objects to access all files. 25 26Unlike a unix shell, Python does not do any *automatic* path expansions. 27Functions such as :func:`expanduser` and :func:`expandvars` can be invoked 28explicitly when an application desires shell-like path expansion. (See also 29the :mod:`glob` module.) 30 31 32.. seealso:: 33 The :mod:`pathlib` module offers high-level path objects. 34 35 36.. note:: 37 38 All of these functions accept either only bytes or only string objects as 39 their parameters. The result is an object of the same type, if a path or 40 file name is returned. 41 42 43.. note:: 44 45 Since different operating systems have different path name conventions, there 46 are several versions of this module in the standard library. The 47 :mod:`os.path` module is always the path module suitable for the operating 48 system Python is running on, and therefore usable for local paths. However, 49 you can also import and use the individual modules if you want to manipulate 50 a path that is *always* in one of the different formats. They all have the 51 same interface: 52 53 * :mod:`posixpath` for UNIX-style paths 54 * :mod:`ntpath` for Windows paths 55 * :mod:`macpath` for old-style MacOS paths 56 57 58.. function:: abspath(path) 59 60 Return a normalized absolutized version of the pathname *path*. On most 61 platforms, this is equivalent to calling the function :func:`normpath` as 62 follows: ``normpath(join(os.getcwd(), path))``. 63 64 .. versionchanged:: 3.6 65 Accepts a :term:`path-like object`. 66 67 68.. function:: basename(path) 69 70 Return the base name of pathname *path*. This is the second element of the 71 pair returned by passing *path* to the function :func:`split`. Note that 72 the result of this function is different 73 from the Unix :program:`basename` program; where :program:`basename` for 74 ``'/foo/bar/'`` returns ``'bar'``, the :func:`basename` function returns an 75 empty string (``''``). 76 77 .. versionchanged:: 3.6 78 Accepts a :term:`path-like object`. 79 80 81.. function:: commonpath(paths) 82 83 Return the longest common sub-path of each pathname in the sequence 84 *paths*. Raise ValueError if *paths* contains both absolute and relative 85 pathnames, or if *paths* is empty. Unlike :func:`commonprefix`, this 86 returns a valid path. 87 88 .. availability:: Unix, Windows. 89 90 .. versionadded:: 3.5 91 92 .. versionchanged:: 3.6 93 Accepts a sequence of :term:`path-like objects <path-like object>`. 94 95 96.. function:: commonprefix(list) 97 98 Return the longest path prefix (taken character-by-character) that is a 99 prefix of all paths in *list*. If *list* is empty, return the empty string 100 (``''``). 101 102 .. note:: 103 104 This function may return invalid paths because it works a 105 character at a time. To obtain a valid path, see 106 :func:`commonpath`. 107 108 :: 109 110 >>> os.path.commonprefix(['/usr/lib', '/usr/local/lib']) 111 '/usr/l' 112 113 >>> os.path.commonpath(['/usr/lib', '/usr/local/lib']) 114 '/usr' 115 116 .. versionchanged:: 3.6 117 Accepts a :term:`path-like object`. 118 119 120.. function:: dirname(path) 121 122 Return the directory name of pathname *path*. This is the first element of 123 the pair returned by passing *path* to the function :func:`split`. 124 125 .. versionchanged:: 3.6 126 Accepts a :term:`path-like object`. 127 128 129.. function:: exists(path) 130 131 Return ``True`` if *path* refers to an existing path or an open 132 file descriptor. Returns ``False`` for broken symbolic links. On 133 some platforms, this function may return ``False`` if permission is 134 not granted to execute :func:`os.stat` on the requested file, even 135 if the *path* physically exists. 136 137 .. versionchanged:: 3.3 138 *path* can now be an integer: ``True`` is returned if it is an 139 open file descriptor, ``False`` otherwise. 140 141 .. versionchanged:: 3.6 142 Accepts a :term:`path-like object`. 143 144 145.. function:: lexists(path) 146 147 Return ``True`` if *path* refers to an existing path. Returns ``True`` for 148 broken symbolic links. Equivalent to :func:`exists` on platforms lacking 149 :func:`os.lstat`. 150 151 .. versionchanged:: 3.6 152 Accepts a :term:`path-like object`. 153 154 155.. index:: single: ~ (tilde); home directory expansion 156 157.. function:: expanduser(path) 158 159 On Unix and Windows, return the argument with an initial component of ``~`` or 160 ``~user`` replaced by that *user*'s home directory. 161 162 .. index:: module: pwd 163 164 On Unix, an initial ``~`` is replaced by the environment variable :envvar:`HOME` 165 if it is set; otherwise the current user's home directory is looked up in the 166 password directory through the built-in module :mod:`pwd`. An initial ``~user`` 167 is looked up directly in the password directory. 168 169 On Windows, :envvar:`HOME` and :envvar:`USERPROFILE` will be used if set, 170 otherwise a combination of :envvar:`HOMEPATH` and :envvar:`HOMEDRIVE` will be 171 used. An initial ``~user`` is handled by stripping the last directory component 172 from the created user path derived above. 173 174 If the expansion fails or if the path does not begin with a tilde, the path is 175 returned unchanged. 176 177 .. versionchanged:: 3.6 178 Accepts a :term:`path-like object`. 179 180.. index:: 181 single: $ (dollar); environment variables expansion 182 single: % (percent); environment variables expansion (Windows) 183 184.. function:: expandvars(path) 185 186 Return the argument with environment variables expanded. Substrings of the form 187 ``$name`` or ``${name}`` are replaced by the value of environment variable 188 *name*. Malformed variable names and references to non-existing variables are 189 left unchanged. 190 191 On Windows, ``%name%`` expansions are supported in addition to ``$name`` and 192 ``${name}``. 193 194 .. versionchanged:: 3.6 195 Accepts a :term:`path-like object`. 196 197 198.. function:: getatime(path) 199 200 Return the time of last access of *path*. The return value is a floating point number giving 201 the number of seconds since the epoch (see the :mod:`time` module). Raise 202 :exc:`OSError` if the file does not exist or is inaccessible. 203 204 205.. function:: getmtime(path) 206 207 Return the time of last modification of *path*. The return value is a floating point number 208 giving the number of seconds since the epoch (see the :mod:`time` module). 209 Raise :exc:`OSError` if the file does not exist or is inaccessible. 210 211 .. versionchanged:: 3.6 212 Accepts a :term:`path-like object`. 213 214 215.. function:: getctime(path) 216 217 Return the system's ctime which, on some systems (like Unix) is the time of the 218 last metadata change, and, on others (like Windows), is the creation time for *path*. 219 The return value is a number giving the number of seconds since the epoch (see 220 the :mod:`time` module). Raise :exc:`OSError` if the file does not exist or 221 is inaccessible. 222 223 .. versionchanged:: 3.6 224 Accepts a :term:`path-like object`. 225 226 227.. function:: getsize(path) 228 229 Return the size, in bytes, of *path*. Raise :exc:`OSError` if the file does 230 not exist or is inaccessible. 231 232 .. versionchanged:: 3.6 233 Accepts a :term:`path-like object`. 234 235 236.. function:: isabs(path) 237 238 Return ``True`` if *path* is an absolute pathname. On Unix, that means it 239 begins with a slash, on Windows that it begins with a (back)slash after chopping 240 off a potential drive letter. 241 242 .. versionchanged:: 3.6 243 Accepts a :term:`path-like object`. 244 245 246.. function:: isfile(path) 247 248 Return ``True`` if *path* is an :func:`existing <exists>` regular file. 249 This follows symbolic links, so both :func:`islink` and :func:`isfile` can 250 be true for the same path. 251 252 .. versionchanged:: 3.6 253 Accepts a :term:`path-like object`. 254 255 256.. function:: isdir(path) 257 258 Return ``True`` if *path* is an :func:`existing <exists>` directory. This 259 follows symbolic links, so both :func:`islink` and :func:`isdir` can be true 260 for the same path. 261 262 .. versionchanged:: 3.6 263 Accepts a :term:`path-like object`. 264 265 266.. function:: islink(path) 267 268 Return ``True`` if *path* refers to an :func:`existing <exists>` directory 269 entry that is a symbolic link. Always ``False`` if symbolic links are not 270 supported by the Python runtime. 271 272 .. versionchanged:: 3.6 273 Accepts a :term:`path-like object`. 274 275 276.. function:: ismount(path) 277 278 Return ``True`` if pathname *path* is a :dfn:`mount point`: a point in a 279 file system where a different file system has been mounted. On POSIX, the 280 function checks whether *path*'s parent, :file:`{path}/..`, is on a different 281 device than *path*, or whether :file:`{path}/..` and *path* point to the same 282 i-node on the same device --- this should detect mount points for all Unix 283 and POSIX variants. It is not able to reliably detect bind mounts on the 284 same filesystem. On Windows, a drive letter root and a share UNC are 285 always mount points, and for any other path ``GetVolumePathName`` is called 286 to see if it is different from the input path. 287 288 .. versionadded:: 3.4 289 Support for detecting non-root mount points on Windows. 290 291 .. versionchanged:: 3.6 292 Accepts a :term:`path-like object`. 293 294 295.. function:: join(path, *paths) 296 297 Join one or more path components intelligently. The return value is the 298 concatenation of *path* and any members of *\*paths* with exactly one 299 directory separator (``os.sep``) following each non-empty part except the 300 last, meaning that the result will only end in a separator if the last 301 part is empty. If a component is an absolute path, all previous 302 components are thrown away and joining continues from the absolute path 303 component. 304 305 On Windows, the drive letter is not reset when an absolute path component 306 (e.g., ``r'\foo'``) is encountered. If a component contains a drive 307 letter, all previous components are thrown away and the drive letter is 308 reset. Note that since there is a current directory for each drive, 309 ``os.path.join("c:", "foo")`` represents a path relative to the current 310 directory on drive :file:`C:` (:file:`c:foo`), not :file:`c:\\foo`. 311 312 .. versionchanged:: 3.6 313 Accepts a :term:`path-like object` for *path* and *paths*. 314 315 316.. function:: normcase(path) 317 318 Normalize the case of a pathname. On Unix and Mac OS X, this returns the 319 path unchanged; on case-insensitive filesystems, it converts the path to 320 lowercase. On Windows, it also converts forward slashes to backward slashes. 321 Raise a :exc:`TypeError` if the type of *path* is not ``str`` or ``bytes`` (directly 322 or indirectly through the :class:`os.PathLike` interface). 323 324 .. versionchanged:: 3.6 325 Accepts a :term:`path-like object`. 326 327 328.. function:: normpath(path) 329 330 Normalize a pathname by collapsing redundant separators and up-level 331 references so that ``A//B``, ``A/B/``, ``A/./B`` and ``A/foo/../B`` all 332 become ``A/B``. This string manipulation may change the meaning of a path 333 that contains symbolic links. On Windows, it converts forward slashes to 334 backward slashes. To normalize case, use :func:`normcase`. 335 336 .. versionchanged:: 3.6 337 Accepts a :term:`path-like object`. 338 339 340.. function:: realpath(path) 341 342 Return the canonical path of the specified filename, eliminating any symbolic 343 links encountered in the path (if they are supported by the operating system). 344 345 .. versionchanged:: 3.6 346 Accepts a :term:`path-like object`. 347 348 349.. function:: relpath(path, start=os.curdir) 350 351 Return a relative filepath to *path* either from the current directory or 352 from an optional *start* directory. This is a path computation: the 353 filesystem is not accessed to confirm the existence or nature of *path* or 354 *start*. 355 356 *start* defaults to :attr:`os.curdir`. 357 358 .. availability:: Unix, Windows. 359 360 .. versionchanged:: 3.6 361 Accepts a :term:`path-like object`. 362 363 364.. function:: samefile(path1, path2) 365 366 Return ``True`` if both pathname arguments refer to the same file or directory. 367 This is determined by the device number and i-node number and raises an 368 exception if an :func:`os.stat` call on either pathname fails. 369 370 .. availability:: Unix, Windows. 371 372 .. versionchanged:: 3.2 373 Added Windows support. 374 375 .. versionchanged:: 3.4 376 Windows now uses the same implementation as all other platforms. 377 378 .. versionchanged:: 3.6 379 Accepts a :term:`path-like object`. 380 381 382.. function:: sameopenfile(fp1, fp2) 383 384 Return ``True`` if the file descriptors *fp1* and *fp2* refer to the same file. 385 386 .. availability:: Unix, Windows. 387 388 .. versionchanged:: 3.2 389 Added Windows support. 390 391 .. versionchanged:: 3.6 392 Accepts a :term:`path-like object`. 393 394 395.. function:: samestat(stat1, stat2) 396 397 Return ``True`` if the stat tuples *stat1* and *stat2* refer to the same file. 398 These structures may have been returned by :func:`os.fstat`, 399 :func:`os.lstat`, or :func:`os.stat`. This function implements the 400 underlying comparison used by :func:`samefile` and :func:`sameopenfile`. 401 402 .. availability:: Unix, Windows. 403 404 .. versionchanged:: 3.4 405 Added Windows support. 406 407 .. versionchanged:: 3.6 408 Accepts a :term:`path-like object`. 409 410 411.. function:: split(path) 412 413 Split the pathname *path* into a pair, ``(head, tail)`` where *tail* is the 414 last pathname component and *head* is everything leading up to that. The 415 *tail* part will never contain a slash; if *path* ends in a slash, *tail* 416 will be empty. If there is no slash in *path*, *head* will be empty. If 417 *path* is empty, both *head* and *tail* are empty. Trailing slashes are 418 stripped from *head* unless it is the root (one or more slashes only). In 419 all cases, ``join(head, tail)`` returns a path to the same location as *path* 420 (but the strings may differ). Also see the functions :func:`dirname` and 421 :func:`basename`. 422 423 .. versionchanged:: 3.6 424 Accepts a :term:`path-like object`. 425 426 427.. function:: splitdrive(path) 428 429 Split the pathname *path* into a pair ``(drive, tail)`` where *drive* is either 430 a mount point or the empty string. On systems which do not use drive 431 specifications, *drive* will always be the empty string. In all cases, ``drive 432 + tail`` will be the same as *path*. 433 434 On Windows, splits a pathname into drive/UNC sharepoint and relative path. 435 436 If the path contains a drive letter, drive will contain everything 437 up to and including the colon. 438 e.g. ``splitdrive("c:/dir")`` returns ``("c:", "/dir")`` 439 440 If the path contains a UNC path, drive will contain the host name 441 and share, up to but not including the fourth separator. 442 e.g. ``splitdrive("//host/computer/dir")`` returns ``("//host/computer", "/dir")`` 443 444 .. versionchanged:: 3.6 445 Accepts a :term:`path-like object`. 446 447 448.. function:: splitext(path) 449 450 Split the pathname *path* into a pair ``(root, ext)`` such that ``root + ext == 451 path``, and *ext* is empty or begins with a period and contains at most one 452 period. Leading periods on the basename are ignored; ``splitext('.cshrc')`` 453 returns ``('.cshrc', '')``. 454 455 .. versionchanged:: 3.6 456 Accepts a :term:`path-like object`. 457 458 459.. data:: supports_unicode_filenames 460 461 ``True`` if arbitrary Unicode strings can be used as file names (within limitations 462 imposed by the file system). 463