ruta - ¿Cómo simular os.walk en python con un sistema de archivos temporal?
for root dirs files in os walk ruta (1)
No. os.walk()
se construye completamente alrededor de os.listdir()
, con la asistencia de os.path.islink()
y os.path.isdir()
. Estas son esencialmente llamadas al sistema, por lo que tendrías que burlarte de tu sistema de archivos a nivel del sistema . A menos que quiera escribir un plugin FUSE, esto no será fácil de burlar.
Todo lo que os.walk()
necesita devolver es una lista de tuplas, de verdad. A menos que esté probando la manipulación del componente dirs
, no podría ser más simple:
with mock.patch(''os.walk'') as mockwalk:
mockwalk.return_value = [
(''/foo'', (''bar'',), (''baz'',)),
(''/foo/bar'', (), (''spam'', ''eggs'')),
]
Esto se burlaría de la siguiente estructura de directorios:
/foo
├── baz
└── bar
├── spam
└── eggs
Estoy tratando de probar un código que usa os.walk. Quiero crear un sistema de archivos en memoria temporal que pueda llenar con archivos de muestra (vacíos) y directorios que luego devolverá os.walk. Esto debería ahorrarme la complejidad de burlarse de las llamadas os.walk para simular la recursión.
Específicamente, el código que quiero probar es:
if recursive:
log.debug("Recursively searching for files under %s" % path)
for (dir_path, dirs, files) in os.walk(path):
log.debug("Found %d files in %s: %s" % (len(files), path, files))
for f in [os.path.join(dir_path, f) for f in files
if not re.search(exclude, f)]:
yield f
else:
log.debug("Non-recursively searching for files under %s" % path)
for (dir_path, dirs, files) in os.walk(path):
log.debug("Found %d files in %s: %s" % (len(files), path, files))
for f in [os.path.join(dir_path, f) for f in files
if not re.search(exclude, f)]:
yield f
¿Es esto posible en python?