Necesito iterar a través de todos los .asmarchivos dentro de un directorio dado y hacer algunas acciones en ellos.
¿Cómo se puede hacer esto de manera eficiente?
Respuesta original:
import os
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 strobjeto en una variable llamada directory_in_str:
import os
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)
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: continueprint(os.path.join(directory, filename))necesita ser cambiado paraprint(os.path.join(directory_in_str, filename))que funcione en Python 3.6for entry in os.scandir(path): print(entry.path)if filename.endswith((".asm", ".py")):aif filename.endswith(".asm") or filename.endswith(".py"):Esto iterará sobre todos los archivos descendientes, no solo los hijos inmediatos del directorio:
fuente
Puedes intentar usar el módulo glob :
y desde Python 3.5 también puedes buscar subdirectorios:
De los documentos:
fuente
Desde Python 3.5, las cosas son mucho más fáciles con os.scandir ( )
fuente
entryes un posix.DirEntry tipo con un montón de métodos útiles comoentry.is_dir(),is_file(),is_symlink()Python 3.4 y posterior ofrecen pathlib en la biblioteca estándar. Podrías hacerlo:
O si no te gustan las comprensiones de listas:
PathLos objetos se pueden convertir fácilmente en cadenas.fuente
Así es como itero a través de archivos en Python:
NINGUNA DE ESTAS TÉCNICAS GARANTIZAN CUALQUIER ORDEN DE ITERACIÓN
Sí, súper impredecible. Tenga en cuenta que clasifico los nombres de archivo, lo cual es importante si el orden de los archivos es importante, es decir, para cuadros de video o recolección de datos dependiente del tiempo. ¡Sin embargo, asegúrese de poner índices en sus nombres de archivo!
fuente
from pkg_resources import parse_versiony lofilenames.sort(key=parse_version)hicePuede usar glob para referir el directorio y la lista:
Para obtener la lista de todos los directorios en la matriz, puede usar os :
fuente
Todavía no estoy muy contento con esta implementación, quería tener un constructor personalizado que lo haga de
DirectoryIndex._make(next(os.walk(input_path)))tal manera que pueda pasar la ruta para la que desea una lista de archivos. Ediciones de bienvenida!fuente
Realmente me gusta usar la
scandirdirectiva que está integrada en laosbiblioteca. Aquí hay un ejemplo de trabajo:fuente