gh-100783: fix os.path.join documentation (#100811)

- Use "drive", not "drive letter", because of UNC paths
- Previous components are not thrown away from relative drive letters
- Use "segment" instead of "component" for consistency with pathlib
- Other miscellaneous improvements
This commit is contained in:
Shantanu 2023-01-08 00:51:30 -08:00 committed by GitHub
parent 909982e82a
commit 53455a319f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -306,17 +306,18 @@ the :mod:`glob` module.)
.. function:: join(path, *paths) .. function:: join(path, *paths)
Join one or more path components intelligently. The return value is the Join one or more path segments intelligently. The return value is the
concatenation of *path* and any members of *\*paths* with exactly one concatenation of *path* and all members of *\*paths*, with exactly one
directory separator following each non-empty part except the last, meaning directory separator following each non-empty part except the last. That is,
that the result will only end in a separator if the last part is empty. If if the last part is empty, the result will end in a separator. If
a component is an absolute path, all previous components are thrown away a segment is an absolute path (which on Windows requires both a drive and a
and joining continues from the absolute path component. root), then all previous segments are ignored and joining continues from the
absolute path segment.
On Windows, the drive letter is not reset when an absolute path component On Windows, the drive is not reset when a rooted path segment (e.g.,
(e.g., ``r'\foo'``) is encountered. If a component contains a drive ``r'\foo'``) is encountered. If a segment is on a different drive or is an
letter, all previous components are thrown away and the drive letter is absolute path, all previous segments are ignored and the drive is reset. Note
reset. Note that since there is a current directory for each drive, that since there is a current directory for each drive,
``os.path.join("c:", "foo")`` represents a path relative to the current ``os.path.join("c:", "foo")`` represents a path relative to the current
directory on drive :file:`C:` (:file:`c:foo`), not :file:`c:\\foo`. directory on drive :file:`C:` (:file:`c:foo`), not :file:`c:\\foo`.