Me dan una lista de rutas que necesito para verificar los archivos dentro. Por supuesto, si se me proporciona una raíz y un subdirectorio, no es necesario procesar el subdirectorio. Por ejemplo¿Cómo determinar si una ruta es un subdirectorio de otra?
c:\test // process this
c:\test\pics // do not process this
c:\test2 // process this
¿Cómo puedo saber (multiplataforma) que un camino no es un subdirectorio del otro. Preferentemente, me gustaría que fuera multiplataforma, y no me preocupan los enlaces simbólicos, siempre que no sean cíclicos (en el peor de los casos, termino procesando los datos dos veces).
ACTUALIZACIÓN: aquí está el código que terminé usando, gracias a @FJ
def unique_path_roots(paths):
visited = set()
paths = list(set(paths))
for path in sorted(paths,key=cmp_to_key(locale.strcoll)):
path = normcase(normpath(realpath(path)))
head, tail = os.path.split(path)
while head and tail:
if head in visited:
break
head, tail = os.path.split(head)
else:
yield path
visited.add(path)
Esto será más rápido que mi sugerencia, ya que no establece pruebas de adhesión en lugar de escanear una lista. Me gusta. – kindall
@ F.J parece ser un bucle infitie, la cabeza se reduce a c: \ en su base y nunca se establece en Ninguno. – esac
@esac - Disculpa por eso, pensé que en el caso base pondría todo en la cola, no en la cabeza. Ver mi edición, que debería solucionar el problema. –