Überprüfen Sie, ob ein Verzeichnis ein (Dateisystem) root
Ich habe ein Skript, dass Suchvorgänge für ein Verzeichnis mit einer bestimmten Datei, ausgehend vom aktuellen Verzeichnis und geht auf den Baum (denken, versuchen herauszufinden, wo die .git
Verzeichnis sitzt).
Meine Methode sieht wie folgt aus:
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
Nun das problem mit dieser Methode ist, dass, wenn das Verzeichnis nicht gefunden wird, ist es eine Schleife (und schließlich stack-overflows), weil offenbar der Beitritt /
und ..
gibt Sie /
wieder. Ich habe versucht, den Vergleich path
mit parent
oder Ihre repr
s, aber das hat nicht funktioniert (waren Sie immer deutlich). Mein workaround für jetzt ist eine Tiefe counter in der rekursiven Methode und stoppen Sie an einigen zufälligen maximale Schwelle.
Meine Frage ist also, gibt es eine zuverlässige cross-Plattform-Weg, um zu überprüfen, ob erreicht habe ich eine Wurzel im Dateisystem?
- Ich bin mir nicht ganz sicher, ob es zuverlässig ist und auf allen Plattformen, aber wenn Sie os.Pfad.dirname(Pfad)==Pfad, dann scheint es wie Weg ist die Wurzel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, können Sie herausfinden, wenn es eine Datei system-root-tragbar, allerdings würde ich vorschlagen, tun ein Aufruf
os.Pfad.realpath()
auf beiden aktuellen Verzeichnis und berechnet Ihre Eltern und vergleichen, wenn diese identisch sind -- das heißt, Sie drehen sich Ihre Räder und es gibt keinen Punkt fortfahren.Beispiel:
Dieser für uns arbeitet auf Linux. Nicht sicher über Windows, aber:
Wir nutzen os.Pfad.normpath(start), der Aufruf dieser Funktion.