2009-06-05 4 views

Répondre

-1

Si vous voulez la liste dans le répertoire courant, vous pouvez utiliser quelque chose comme:

import os 

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

Il suffit de changer le

os.getcwd() 

à un autre chemin pour obtenir des résultats là-bas.

+0

Cette réponse ne répond pas à la question du PO et n'est pas pertinente pour la plupart des personnes qui chercheraient la même réponse. – 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 vous voulez chercher dans un répertoire différent de "." vous pouvez passer le direcotry comme sys.argv [1] et appelez os.walk (sys.argv [1]). –

+2

Amélioration supplémentaire: Utilisez un générateur au lieu de la liste de compréhension: pour le nom de fichier dans (f pour f ...) –

+1

Si vous voulez exclure un certain répertoire, par exemple, 'old_logs', vous pouvez simplement le supprimer de 'dirnames' ne sera pas recherché: 'if" old_logs "dans dirnames: dirnames.remove (" old_logs ")' – CGFoX

6

Vous pouvez également utiliser le module glob avec 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

Que font les traits de soulignement dans la boucle for? '_' –

+1

@nueverest 'os.walk' renvoie un tuple' (dirpath, dirnames, noms de fichiers) 'à chaque itération, et nous ne sommes intéressés que par' dirpath' (assigné 'dir' ci-dessus); Les caractères de soulignement sont simplement utilisés comme des espaces réservés pour les 2 autres valeurs qui ne nous intéressent pas (c'est-à-dire 'dirnames', puis' noms de fichiers ', sont assignés à la variable '_', que nous n'utiliserons jamais). – tavnab

0

J'ai une solution:

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

ou

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 

Ces deux prennent l'avantage de find . -type f -name *.log.

La première est plus simple, mais pas garanti pour l'espace blanc quand ajouter -name *.log, mais a bien fonctionné pour simplement find ../testdata -type f (dans mon OS X environnement).

Le second sous-processus semble plus compliqué, mais il s'agit de l'espace sécurisé (encore une fois, dans mon environnement OS X).

Ceci est inspiré par Chris Bunch, dans la réponse https://stackoverflow.com/a/3503909/2834102

Questions connexes