2009-06-05 32 views

Respuesta

-1

Si desea enumerar en el directorio actual, puede usar algo como:

import os 

for e in os.walk(os.getcwd()): 
    print e 

Sólo cambia el

os.getcwd() 

a otro camino para obtener resultados allí.

+0

Esta respuesta no aborda la pregunta del OP y no es relevante para la mayoría de las personas que buscarían la misma respuesta. – Andrew

59
import os 
import os.path 

for dirpath, dirnames, filenames in os.walk("."): 
    for filename in [f for f in filenames if f.endswith(".log")]: 
     print os.path.join(dirpath, filename) 
+1

Si desea buscar en un directorio diferente de "." puede pasar el directorio como sys.argv [1] y llamar a os.walk (sys.argv [1]). –

+2

Mejora adicional: utilice un generador en lugar de la lista de comprensión: para el nombre de archivo en (f para f ...) –

+1

Si desea excluir un determinado directorio, por ejemplo, 'old_logs', simplemente puede eliminarlo de' dirnames' y no se buscará: 'if" old_logs "en dirnames: dirnames.remove (" old_logs ")' – CGFoX

6

También puede usar el módulo glob junto con os.walk.

import os 
from glob import glob 

files = [] 
start_dir = os.getcwd() 
pattern = "*.log" 

for dir,_,_ in os.walk(start_dir): 
    files.extend(glob(os.path.join(dir,pattern))) 
+0

¿Qué hacen los caracteres de subrayado en el for-loop? '_' –

+1

@nueverest 'os.walk' devuelve un 3-tuple' (dirpath, dirnames, filenames) 'en cada iteración, y solo estamos interesados ​​en' dirpath' (asignado a 'dir' arriba); los guiones bajos solo se utilizan como marcadores de posición para los otros 2 valores que no nos interesan (es decir, 'dirnames', y luego' filenames', se asignan a la variable '_', que nunca usaremos). – tavnab

0

tengo una solución:

import os 
for logfile in os.popen('find . -type f -name *.log').read().split('\n')[0:-1]: 
     print logfile 

o

import subprocess 
(out, err) = subprocess.Popen(["find", ".", "-type", "f", "-name", "*.log"], stdout=subprocess.PIPE).communicate() 
for logfile in out.split('\n')[0:-1]: 
    print logfile 

Estos dos beneficiarse de find . -type f -name *.log.

El primero de ellos es más sencillo pero no está garantizada de espacios en blanco cuando se añada -name *.log, pero trabajado bien para simplemente find ../testdata -type f (en mi entorno OS X).

El segundo subproceso que utiliza parece más complicado, pero este es el espacio seguro (de nuevo, en mi entorno OS X).

Esta es inspirado por Chris Bunch, en la respuesta https://stackoverflow.com/a/3503909/2834102

Cuestiones relacionadas