Necesito iterar a través de todos los .asm
archivos 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 str
objeto 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: continue
print(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
entry
es 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:
Path
Los 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_version
y 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
scandir
directiva que está integrada en laos
biblioteca. Aquí hay un ejemplo de trabajo:fuente