私は Python を学んでいますが、スクリプトの 1 つに奇妙な点があることに気付きました。少しテストを行ったところ、この問題が次の動作に起因することがわかりました。
>>> import os
>>> os.path.join('a','b')
'a/b'
>>> os.path.join('a','/b')
'/b'
ドキュメントを確認すると、これは実際には関数の設計です。
os.path. 結合(パス 1 [ ,パス2 [ , ... ]] )
1 つ以上のパス コンポーネントをインテリジェントに結合します。いずれかのコンポーネントが絶対パスである場合、以前のすべてのコンポーネント (Windows では、以前のドライブ文字があった場合はそれを含む) が破棄され、結合が続行されます。...
私の質問は、スクリプトが失敗した理由ではなく、関数がこのように設計された理由です。つまり、少なくともUnixでは、a//b
エレガントではないにしても、パスを指定するのに完全に受け入れられる方法です。関数がこのように設計されたのはなぜですか? で各パス文字列をテストする以外に、1 つ以上のパス要素が破棄されたかどうかを確認する方法はありますos.path.isabs()
か?
好奇心から、パス コンポーネントがos.sep
文字で終わるケースも確認しました。
>>> os.path.join('a/','b')
'a/b'
それは期待どおりに機能します。