una rutas recorrer nombre manejo leer imagenes explorador directorios directorio con como carpetas carpeta archivos archivo abrir python iterator directory

rutas - recorrer directorios en python



¿Cómo puedo iterar sobre archivos en un directorio dado? (6)

Así es como itero a través de archivos en Python:

import os path = ''the/name/of/your/path'' folder = os.fsencode(path) filenames = [] for file in os.listdir(folder): filename = os.fsdecode(file) if filename.endswith( (''.jpeg'', ''.png'', ''.gif'') ): # whatever file types you''re using... filenames.append(filename) filenames.sort() # now you have the filenames and can do something with them

NINGUNA DE ESTAS TÉCNICAS GARANTIZAN CUALQUIER ORDEN DE ITERACIÓN

Sí, super impredecible. Tenga en cuenta que ordeno los nombres de los archivos, lo cual es importante si el orden de los archivos es importante, es decir, para los cuadros de video o la recopilación de datos dependiente del tiempo. ¡Asegúrate de poner índices en tus nombres de archivo!

Necesito recorrer todos los archivos .asm dentro de un directorio determinado y realizar algunas acciones en ellos.

¿Cómo se puede hacer esto de una manera eficiente?


Esto recorrerá todos los archivos descendientes, no solo los hijos inmediatos del directorio:

import os for subdir, dirs, files in os.walk(rootdir): for file in files: #print os.path.join(subdir, file) filepath = subdir + os.sep + file if filepath.endswith(".asm"): print (filepath)


Puedes intentar usar el módulo glob

import glob for filepath in glob.iglob(''my_dir/*.asm''): print(filepath)


Python 3.4 y pathlib posteriores ofrecen pathlib en la biblioteca estándar. Podrías hacerlo:

from pathlib import Path asm_pths = [pth for pth in Path.cwd().iterdir() if pth.suffix == ''.asm'']

O si no te gustan las listas de comprensión:

asm_paths = [] for pth in Path.cwd().iterdir(): if pth.suffix == ''.asm'': asm_pths.append(pth)

Path objetos de Path se pueden convertir fácilmente en cadenas.


Respuesta original:

for filename in os.listdir(directory): if filename.endswith(".asm") or filename.endswith(".py"): # print(os.path.join(directory, filename)) continue else: continue

Versión de Python 3.6 de la respuesta anterior, usando os - asumiendo que tiene la ruta del directorio como un objeto str en una variable llamada directory_in_str :

directory = os.fsencode(directory_in_str) for file in os.listdir(directory): filename = os.fsdecode(file) if filename.endswith(".asm") or filename.endswith(".py"): # print(os.path.join(directory, filename)) continue else: continue

O recursivamente, usando pathlib :

from pathlib import Path pathlist = Path(directory_in_str).glob(''**/*.asm'') for path in pathlist: # because path is object not string path_in_str = str(path) # print(path_in_str)


Todavía no estoy muy contento con esta implementación, quería tener un constructor personalizado que DirectoryIndex._make(next(os.walk(input_path))) para que solo pueda pasar la ruta para la que desea una lista de archivos. Ediciones bienvenidas!

import collections import os DirectoryIndex = collections.namedtuple(''DirectoryIndex'', [''root'', ''dirs'', ''files'']) for file_name in DirectoryIndex(*next(os.walk(''.''))).files: file_path = os.path.join(path, file_name)