The behavior of os.path.join() regarding path separators does not match the documentation. This affects Python 3.6, and goes back to at least Python 2.7. From the documenation: "The return value is the concatenation of path and any members of *paths with exactly one directory separator (os.sep) following each non-empty part except the last, meaning that the result will only end in a separator if the last part is empty." To me, this means that join will remove extraneous separators from the path, and that the only way to produce a trailing separator is to use join "" as the final path segment. I expect `os.path.join("/abc//", "def/")` to produce the string "/abc/def" based on the documentation, but what it actually produces is "abc//def/".
your example actually produces '/abc//def/'. However, I'm not sure where do you get the idea that it should clean up internal directory separators or do anything at all with the strings in paths. To me it reads like it's concatenating arguments skipping over the empty ones unless it's also the last one. In any case, what would you propose to fix the language to describe the behaviour more clear?
For me, the ambiguity is due to the phrases "exactly one directory separator" and "the only way to produce a trailing separator". I would suggest: "The return value is the concatenation of path and any members of *paths so that there is a directory separator (os.sep) following each part except the last. An empty part is ignored unless it is the last part, in which case the result will end in a separator." Or: "The return value is the concatenation of path and any members of *paths such that there is guaranteed to be a directory separator (os.sep) following each part except the last. An empty part is ignored unless it is the last part, in which case the result will end in a separator."
keywords: + easytitle: Behavior of os.path.join does not match documentation -> [doc] Behavior of os.path.join does not match documentationversions: + Python 3.9, Python 3.10, Python 3.11, - Python 2.7, Python 3.4, Python 3.5, Python 3.6