在Unix下, os.path.normpath 将多个斜杠折叠成单个,除非出现路径开头的两个斜线。为什么例外?
为了说明,我得到以下转换:
//double/slash/stays -> //double/slash/stays
/double/slash//gone// -> /double/slash/gone/
double//slash//gone/ -> double/slash/gone
///triple/slash/gone -> /triple/slash/gone
////quad/slash/gone -> /quad/slash/gone
这对我来说很奇怪。我可以模糊地想象这对SMB安装或URL有用,但我不认为我关心那些。 Python的行为是否有任何隐藏的智慧,或者我是否应该崩溃前导//我自己?
[更新] 鉴于下面的答案,看起来最好不要崩溃//,而是要么只是接受它,要么将其视为错误。
答案 0 :(得分:8)
因为POSIX允许以实现定义的方式处理以两个斜杠开头的路径。换句话说,// foo并不一定意味着与所有POSIX系统上的/ foo相同。
可以解释以两个连续斜杠开头的路径名 以实现定义的方式,虽然超过两个领先 斜杠应视为单斜线。
另请参阅this bug report(已关闭为无效)。