2011-10-19 4 views
4

UNIXの場合、os.path.normpathは、スラッシュを1つにまとめますスラッシュがちょうど2つある場合を除き、パスの先頭にはと表示されます。なぜ例外?説明するためにos.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マウントやURLSには便利だとはっきり想像することができますが、私はそれらを気にしません。 Pythonの振る舞いに隠された知恵があるのでしょうか。

最善のことは//を崩壊しないように、[更新]下記の答えを考慮して 、それは見えますが、ただそれを受け入れるか、エラーとしてそれを治療するためのいずれか。

答えて

8

POSIXでは、実装定義の方法で2つのスラッシュで始まるパスを扱うことができるためです。言い換えれば、// fooは必ずしもすべてのPOSIXシステムで/ fooと同じことを意味するわけではありません。

IEEE Std 1003.1

から:つ以上の主要 スラッシュは、単一のスラッシュとして扱われなければならないが

二つの連続するスラッシュで始まるパス名は、実装定義の方法で を解釈することができます。

this bug reportも参照してください(これは無効として閉じられました)。

+0

あなたはこれの例を挙げることができますか?私はこれを私のLinuxシステムでどのように実装できるかを知りたいと思っています; – Blender

+0

私が知る限り、Linuxはこの事実を利用していません。 「実装定義」とは、インプリメンテーションが、単一のスラッシュのように二重スラッシュを処理することを含め、必要なものを実行できることを意味します。 –

+0

興味深い。知恵が隠されているPythonではなくPOSIXです。 Unix世界のどこかの誰かが//接頭辞を使用しなければなりません - そして、この奇妙な規則を作るためにPOSIXを動かす必要があります。その意図が何であるか、あるいは何であったか? –

関連する問題