2017-12-24 1 views
0

Ich suche rekursiv nach Verzeichnissen und zeige nur Dateien mit der Zeichenfolge "AWSTemplateFormatVersion" an.Python durchsucht Verzeichnisse rekursiv und zeigt nur Dateien an, die eine bestimmte Zeichenfolge enthalten.

import os, json 

cfn = [".json", ".template", ".yaml", ".yml"] 
dir = "./janitor" 

def cloudFormation(dir): 
    for root, dirs, files in os.walk(dir): 
     for file in files: 
      if file.endswith(tuple(cfn)): 
       with open(os.path.join(root, file), 'r') as fin: 
        data = fin.read() 
        print("************ Break **************") 
        print(data) 
        print(os.path.join(root, file)) 
    return data 

if __name__ == "__main__": 
    cloudFormation(dir) 
+2

'wenn" AWSTemplateFormatVersion "in Daten"? –

+0

Warum nicht einfach 'grep -R' verwenden –

Antwort

1

Wie wäre es mit so etwas? Wie Mike Müller in Kommentaren vorschlägt, teste das Auftreten in data. Auch anstelle den letztendata Wert von Druck, ich habe Ihren Code zurückzukehren, um eine Liste aller Dateien mit den Bedingungen geändert wahr:

import os, json 

cfn = [".json", ".template", ".yaml", ".yml"] 
dir = "./janitor" 

def cloudFormation(dir): 
    files_with_string = [] 
    for root, dirs, files in os.walk(dir): 
     for file in files: 
      if file.endswith(tuple(cfn)): 
       with open(os.path.join(root, file), 'r') as fin: 
        data = fin.read() 
        if "AWSTemplateFormatVersion" in data: 
         files_with_string.append(os.path.join(root, file)) 
         print("************ Break **************") 
         print(data) 
         print(os.path.join(root, file)) 
    return files_with_string 

if __name__ == "__main__": 
    cloudFormation(dir) 

Ich weiß nicht, wie Sie es umsetzen wollen in Ihrem Lösung; d. h. die Anzahl und Größe der Dateien, aber hier zwei Anmerkungen:

Wenn Ihre Dateien groß sind, dann lesen Sie vielleicht, anstatt die gesamte Datei zu lesen, nur Teile der Dateien inkrementell.

Wenn Sie viele Dateien haben, erstellen Sie vielleicht eine Generatorfunktion, anstatt eine Liste aller Dateinamen zurückzugeben.

Verwandte Themen