Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿Pathlib sigue encontrando archivos ocultos? Poda el recorrido, no filtres el resultado

El filtro actúa después de que Python ya entró en el directorio. Define la política de ocultos, poda en modo top-down y verifica el árbol que nunca se visitó.

Original diagram comparing a pathlib result filter that still enters a hidden subtree with top-down pruning that prevents descent.
Ilustración original: filtro posterior frente a poda top-down. Watch at Ease

Pathlib no trata el punto inicial como exclusión universal: su glob puede coincidir con nombres de punto, mientras glob.glob tiene include_hidden. Descartar un resultado de rglob después no impide que Python entre en el directorio y enumere sus descendientes.

Define primero si oculto significa prefijo de punto POSIX, atributo hidden de Windows, caché de aplicación o una combinación. Después poda dirnames antes de entrar, filtra archivos por separado y guarda un registro de visitados, omitidos, enlaces y errores.

Escribe primero el contrato de ocultos

Registra raíz, plataforma, versión de Python y objetivo. Define por separado punto, atributo Windows y exclusiones como build o vendor.

No llames multiplataforma a una prueba de un carácter si no consulta el metadato de cada sistema.

Poda directorios antes de entrar

En Python 3.12+ usa root.walk(top_down=True) y conserva en dirnames[:] solo hijos permitidos. El walker no entra en los eliminados.

En versiones anteriores usa os.walk(topdown=True). Debes modificar la lista in-place, no reasignar una variable local.

Separa filtros de archivo y diferencias de glob

Tras podar directorios, aplica la política a archivos para excluir hojas como .DS_Store. Filtrar archivos no es podar subárboles.

Si usas glob.glob, registra include_hidden. Compartir * y ** no implica el mismo valor predeterminado; ** también puede ser costoso.

Decide atributos de Windows y symlinks

En Windows consulta FILE_ATTRIBUTE_HIDDEN con una API soportada para directorios y archivos. La convención del punto es una señal distinta.

No sigas symlinks de directorio por defecto. Si debes hacerlo, registra identidad estable y rechaza repeticiones para evitar ciclos.

Cierra con un manifiesto de aceptación

on_error debe registrar ruta, operación y excepción. Decide si un permiso denegado falla, marca incompleto o permite omitir; nunca lo borres en silencio.

El manifiesto incluye raíz, versión de política, recuentos visitados y producidos, raíces omitidas, política de enlaces y errores. Prueba con un fixture pequeño.

Original decision diagram separating dot-prefixed names, Windows hidden attributes, and application-specific exclusions.
Ilustración original: nombres con punto, atributo Windows y regla de aplicación. Watch at Ease