-
-
Notifications
You must be signed in to change notification settings - Fork 32.2k
gh-77607: Rephrase documentation of os.path.join() #98995
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -298,10 +298,10 @@ 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 | ||||||||||||||||||||||
concatenation of *path* and any non-empty members of *\*paths* separated | ||||||||||||||||||||||
by the platform's directory separator character. If the last member of *\*paths* | ||||||||||||||||||||||
is empty, the result will end in the platform's directory separator. | ||||||||||||||||||||||
Comment on lines
+302
to
+303
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @serhiy-storchaka Revisiting this, here's one alternative wording without introducing new terms:
Suggested change
That would keep the idea of the original (but incorrect) note of
Suggested change
|
||||||||||||||||||||||
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 | ||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Made this part a bit more specific, but can use original suggested wording if wanted
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is not true. For example,
os.path.join('', '')
->''
. On Windows,os.path.join('c:', '')
->'c:'
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's a good point. Then perhaps instead,
is empty, and if *path* is not a root dir or empty, then ...
. It can also be optionally less specific, and say,... the result will generally end in the ...
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is problematic, because the term "root dir" needs explanation, especially on Windows.
What if just say that empty members are ignored, except the last one?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If it needs some explanation, then maybe we give a quick example and phrase it as "... and if path is a root directory (i.e., / or c:) or empty, then ..."
For your second statement, do you mean leaving out the note on platform separators? It seems a bit too noteworthy to leave it out though. It could be phrased differently like,
If the last element of paths is empty, the result will end in the platform's directory separator, unless path is empty or a root directory.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I afraid that it would be too verbose and still not clear. It is not good place to introduce a new term, especially if it may conflict with the meaning in other sites.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see, you would prefer to keep it a bit vague, like
The return value is the concatenation of *path* and any non-empty members of *paths* separated by the platform's directory separator character. Empty members of *paths* are ignored except for the last path. If a component is an absolute path, ...
?