From 53455a319f3f2e5609fca2a313ea356fba318665 Mon Sep 17 00:00:00 2001 From: Shantanu <12621235+hauntsaninja@users.noreply.github.com> Date: Sun, 8 Jan 2023 00:51:30 -0800 Subject: [PATCH] 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 --- Doc/library/os.path.rst | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst index 50e089653fe71b..42bbe24830e6c1 100644 --- a/Doc/library/os.path.rst +++ b/Doc/library/os.path.rst @@ -306,17 +306,18 @@ the :mod:`glob` module.) .. function:: join(path, *paths) - Join one or more path components intelligently. The return value is the - concatenation of *path* and any members of *\*paths* with exactly one - directory separator following each non-empty part except the last, meaning - that the result will only end in a separator if the last part is empty. If - a component is an absolute path, all previous components are thrown away - and joining continues from the absolute path component. - - On Windows, the drive letter is not reset when an absolute path component - (e.g., ``r'\foo'``) is encountered. If a component contains a drive - letter, all previous components are thrown away and the drive letter is - reset. Note that since there is a current directory for each drive, + Join one or more path segments intelligently. The return value is the + concatenation of *path* and all members of *\*paths*, with exactly one + directory separator following each non-empty part except the last. That is, + if the last part is empty, the result will end in a separator. If + a segment is an absolute path (which on Windows requires both a drive and a + root), then all previous segments are ignored and joining continues from the + absolute path segment. + + On Windows, the drive is not reset when a rooted path segment (e.g., + ``r'\foo'``) is encountered. If a segment is on a different drive or is an + absolute path, all previous segments are ignored and the drive is reset. Note + that since there is a current directory for each drive, ``os.path.join("c:", "foo")`` represents a path relative to the current directory on drive :file:`C:` (:file:`c:foo`), not :file:`c:\\foo`.