Tengo un script que busca un directorio que contiene un archivo específico, comenzando desde el directorio actual y subiendo por el árbol (intente averiguar dónde se encuentra el directorio .git
)Compruebe si un directorio es un (sistema de archivos) raíz
Mi método es el siguiente:
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
Ahora el problema con este método es que, si no se puede encontrar el directorio, se realiza un bucle (y eventualmente apilar-desbordamientos), porque al parecer unirse /
y ..
le da /
nuevamente. Intenté comparar path
con parent
o sus repr
s, pero eso no funcionó (siempre fueron distintos). Mi solución por ahora es incluir un contador de profundidad en el método recursivo y detenerme en algún umbral máximo aleatorio.
Mi pregunta es, por lo tanto, ¿existe una manera confiable de plataforma cruzada para comprobar si he llegado a una raíz en el sistema de archivos?
No estoy seguro de si es confiable en todas las plataformas, pero si os.path.dirname (path) == path, entonces parece que la ruta es la raíz. –