2016-08-31 3 views
0

Mit Python möchte ich einen Verzeichnisbaum rekursiv nach einem bestimmten Dateinamen suchen.Python sucht rekursiv nach einem einzelnen Dateinamen im Verzeichnisbaum. Gibt false zurück, wenn nicht gefunden

** Falls gefunden, nichts drucken.

** Wenn nicht gefunden, drucken Sie eine Nachricht, die besagt, dass sie nicht gefunden wurde.

===== hier ist, was ich habe bisher keine Fehler, aber keine Meldung, wenn die Datei nicht gefunden entweder =====

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' 

Antwort

1

Return früh, wenn Sie die Datei nicht finden; auf diese Weise, nach dem os.walk() Schleife abgeschlossen hat wissen Sie, die Datei wurde nie gefunden:

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) 

I _ für beide von os.walk() für jede Iteration zurück die dirpath und Verzeichnisse Werte verwendet werden; Ansonsten ignoriert die Schleife diese und _ signalisiert dies dem Leser.

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

Wenn Sie mit Python3.5 + können Sie ** mit dem recursive Flag verwenden:

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

Dies würde mehrere Dateien finden (die Suche wird fortgesetzt, nachdem die erste Datei gefunden wurde), und Sie didn Die tatsächliche Druckanforderung wird nicht berücksichtigt, wenn keine gefunden wurde. –

+0

@MartijnPieters, hinzugefügt den 'print' Teil :) Danke! – Dekel

Verwandte Themen