Christian Heimes wrote:
Gregory Ewing wrote:

ntpath.join('d:\\foo', '\\bar')

'\\bar'

This does seem like a bug, though -- the correct result
should really be 'd:\\bar', since that's what you would
get if you used the name '\\bar' with 'd:' as your current
drive.


No, it's not a bug. Since \bar is an absolute path, all path segments
before the absolute path are ignored. This is documented at
http://docs.python.org/library/os.path.html#os.path.join

Given that it's documented to work that way, I'll agree that this is not a bug -- however, that doesn't mean it's /right/.

From the documentation:
Join one or more path components *intelligently*.

To me, that means taking into account the bizarre in the MS world of multiple roots on a system... I know I have looked at os.path.join a couple times also, and found the documented behavior to be completely unsatisfactory. In the MS world a drive letter specifier should trump a mere backslash, not be trumped by it.

Are there real world situations where the reverse is desired?

ntpath.isabs("\\bar")

True

ntpath.join("ignored", "\\bar")

'\\bar'

Posixpath follows the same rules, too.


posixpath.join("..", "egg", "/var")

'/var'

posixpath.join("..", "egg", "var")

'../egg/var'

Posix has the luxury of running on sane systems with only one root.

~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to