为什么os.normpath没有崩溃领先的双斜线?

时间:2011-10-19 05:13:02

标签: python filepath

在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的行为是否有任何隐藏的智慧,或者我是否应该崩溃前导//我自己?

[更新] 鉴于下面的答案,看起来最好不要崩溃//,而是要么只是接受它,要么将其视为错误。

1 个答案:

答案 0 :(得分:8)

因为POSIX允许以实现定义的方式处理以两个斜杠开头的路径。换句话说,// foo并不一定意味着与所有POSIX系统上的/ foo相同。

来自IEEE Std 1003.1

  

可以解释以两个连续斜杠开头的路径名   以实现定义的方式,虽然超过两个领先   斜杠应视为单斜线。

另请参阅this bug report(已关闭为无效)。