現在のディレクトリから始めて、特定のファイルを含むディレクトリを検索するスクリプトがあります(.git
ディレクトリがどこにあるのか調べようとしています) )。ディレクトリが(ファイルシステムの)ルートであることを確認してください
私の方法は、次のようになります。どうやら/
と..
に参加すると、あなたを与えるため
def getDir(self,cwd):
path = os.path.abspath(cwd)
if not os.path.isdir(path):
raise RuntimeError("getDir should not be run on files")
if FILE in os.listdir(path):
return path
parent = os.path.join(path, os.path.pardir)
if os.access(parent, os.R_OK) and os.access(parent, os.X_OK):
return self.getDir(parent)
else
return None
今、この方法の問題は、それがディレクトリを見つけることができない場合、それはループ(そして最終的にスタックオーバーフロー)、ということです/
。私はpath
とparent
またはそれらのrepr
を比較しようとしましたが、それはうまくいかなかった(常に異なっていた)。私の回避策は、再帰的メソッドに深さカウンタを組み込み、ランダムな最大しきい値で停止することです。
私の質問は、ファイルシステムのルートに達しているかどうかを確認する信頼できるクロスプラットフォームの方法ですか?
すべてのプラットフォームで信頼できるかどうかは完全にはわかりませんが、os.path.dirname(path)== pathの場合、pathはルートのようです。 –