2012-04-30 31 views

Respuesta

324

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 

Python versión 3.6 de la respuesta anterior, utilizando 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) 
+1

Esto parece indicar los directorios o archivos inmediatamente debajo de un directorio. La respuesta por pedromateo a continuación parece hacer una lista recursiva. –

+5

¡Buena respuesta! Puedo agregar que necesita importar el módulo "os" de Python con: - import os – Gabrer

+3

Tenga en cuenta que en Python 3.6 el directorio se espera que esté en bytes y luego listdir escupirá una lista de nombres de archivos también en bytes. por lo que no puede ejecutar endswith directamente en él. Este bloque de código debe cambiarse a 'directorio = os.fsencode (directory_in_str) de archivo en os.listdir (directorio): (" asm") archivo = os.fsdecode (archivo) si filename.endswith o filename.endswith (". py"): # print (os.path.join (directorio, nombre de archivo)) continuar else: continuar' –

73

puede probar a usar glob módulo

import glob 

for filename in glob.iglob('/foobar/*.asm'): 
    print('/foobar/%s' % filename) 
56

Esto iterar sobre todos los archivos descendientes, no sólo 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) 
+1

Se encuentra una referencia para la función os.walk en lo siguiente: https://docs.python.org/2/library/os.path.html#os.path.walk – ScottMcC

4

Python 3.4 y posteriormente ofrecer pathlib en la biblioteca estándar. Se podría hacer:

from pathlib import Path 

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

O si no te gusta las listas por comprensión:

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

Path objetos pueden ser fácilmente convertidos a cadenas.

0

No estoy del todo contento con esta implementación todavía, quería tener un constructor personalizado que haga DirectoryIndex._make(next(os.walk(input_path))) de modo que solo pueda pasar la ruta para la que desea un listado 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) 
Cuestiones relacionadas