walk ruta for files dirs python linux os.walk

ruta - os.walk python 3



os.walk sin carpetas ocultas (2)

Me doy cuenta de que no se lo pregunté en la pregunta, pero tuve un problema similar en el que quería excluir tanto los archivos ocultos como los archivos que comienzan con __ , específicamente los directorios __pycache__ . Aterricé en esta pregunta porque estaba tratando de averiguar por qué la comprensión de mi lista no estaba haciendo lo que esperaba. No estaba modificando la lista en su lugar con dirnames[:] .

Creé una lista de prefijos que quería excluir y modifiqué los dirnames en lugar así:

exclude_prefixes = (''__'', ''.'') # exclusion prefixes for dirpath, dirnames, filenames in os.walk(node): # exclude all dirs starting with exclude_prefixes dirnames[:] = [dirname for dirname in dirnames if not dirname.startswith(exclude_prefixes)]

Necesito enumerar todos los archivos con la ruta del directorio que contiene dentro de una carpeta. Intenté usar os.walk , que obviamente sería la solución perfecta.

Sin embargo, también enumera carpetas y archivos ocultos. Me gustaría que mi aplicación no liste ninguna carpeta o archivo oculto. ¿Hay alguna bandera que puedas usar para que no produzca ningún archivo oculto?

La multiplataforma no es realmente importante para mí, está bien si solo funciona para linux (patrón. *)


No, no hay ninguna opción para os.walk() que los omita. Tendrá que hacerlo usted mismo (que es bastante fácil):

for root, dirs, files in os.walk(path): files = [f for f in files if not f[0] == ''.''] dirs[:] = [d for d in dirs if not d[0] == ''.''] # use files and dirs

Tenga en cuenta las dirs[:] = asignación de segmento; estamos reemplazando los elementos en dirs (y no la lista a la que se hace referencia por dirs ) para que os.walk() no procese los directorios eliminados.

Esto solo funciona si mantiene el argumento de la palabra clave topdown en True , de la documentación de os.walk() :

Cuando topdown es True , la persona que llama puede modificar la lista de nombres de usuarios en el lugar (tal vez utilizando la asignación del o slice), y walk() solo retrocederá en los subdirectorios cuyos nombres permanezcan en los nombres de los nombres; esto se puede usar para eliminar la búsqueda, imponer un orden específico de visita o incluso para informar a walk() sobre los directorios que la persona que llama crea o renombra antes de reanudar walk() .