2016-08-31 1 views
0

En utilisant Python, je voudrais rechercher une arborescence de répertoires de manière récursive pour un nom de fichier spécifique.Python recherche récursivement un seul nom de fichier dans l'arborescence. Renvoie false si non trouvé

** Si trouvé, n'imprimez rien. ** Si introuvable, imprimez un message indiquant qu'il n'a pas été trouvé.

===== voici ce que j'ai à ce jour, aucune erreur, mais aucun message lorsque fichier non trouvé soit =====

import os 
rootDir = 'G:\\some_top_directory\\' 
file_name = 'fileOFinterest.txt' 
def find_file(file_name,rootDir): 
    for dirpath, dirnames, filenames in os.walk(rootDir): 
     if file_name in filenames: 
      print 'found' 

Répondre

1

Retour au début lorsque vous trouvez le fichier; De cette façon, après votre boucle os.walk() terminée, vous savez que le fichier n'a jamais été trouvé:

import os 

def find_file(name, root): 
    for _, _, filenames in os.walk(root): 
     if name in filenames: 
      return # found the file, exit early 
    print 'Not found' 

rootDir = 'G:\\some_top_directory\\' 
file_name = 'fileOFinterest.txt' 
find_file(file_name, rootDir) 

J'utilisé _ tant pour les valeurs dirpath et répertoires retournés par os.walk() pour chaque itération; la boucle les ignore et _ le signale au lecteur.

0
if not any(file_name in filenames 
      for dirpath, dirnames, filenames in os.walk(rootDir)): 
    print file_name, 'not found' 
0

Si vous utilisez Python3.5 + vous pouvez utiliser ** avec le drapeau recursive:

import glob 
rootDir = 'G:\\some_top_directory\\' 
file_name = 'fileOFinterest.txt' 
found_files = glob.glob("{}**\\{}".format(rootDir, file_name), recursive=True) 
if not found_files: 
    # do whatever you need 
    pass 
else: 
    print('found') 
+0

Cela trouverait plusieurs fichiers (la recherche se poursuit après le premier fichier a été trouvé), et vous didn Ne pas gérer l'exigence réelle de l'impression quand aucun n'a été trouvé. –

+0

@MartijnPieters, a ajouté la partie «imprimer» :) merci! – Dekel