2011-10-19 18 views
4

在Unix下,os.path.normpath將多個斜槓摺疊爲單個斜槓,除非出現正好兩個斜槓時,路徑的起始位置爲。爲什麼是例外?爲什麼不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 

這似乎很奇怪,我。我可以隱約想象這對中小企業的坐騎或URLs很有用,但我不認爲我在乎這些。 Python的行爲有沒有隱藏的智慧?或者我應該自己崩潰領先的?

[更新] 考慮下面的答案,它看起來像最好的辦法是不要摺疊//,而是要麼只是接受它,或者把它當作一個錯誤。

回答

8

由於POSIX允許以實現定義的方式處理以兩個斜線開頭的路徑。換句話說,// foo並不一定意味着所有POSIX系統上的/ foo都是一樣的。

IEEE Std 1003.1

與兩個連續的斜線開頭的路徑名可以實現定義的方式來解釋 ,雖然多於兩個主導 斜線應作爲一個單一的斜槓進行處理。

另請參閱this bug report(已關閉無效)。

+0

你能舉一個這樣的例子嗎?我很感興趣,看看我可以在Linux系統中實現這個功能;) – Blender

+0

據我所知,Linux沒有利用這個事實。 「實現定義」意味着實現可以做任何想要的事情,包括像單斜線一樣對待雙斜槓。 –

+0

有趣。現在是隱藏智慧的是POSIX而不是Python。有人在unix世界的某個地方必須使用(或曾經計劃使用)//前綴 - 然後遊說POSIX制定這個奇怪的規則。任何想法是什麼意圖是或是什麼? –

相關問題